7 Agenten sind die App als normaler Nutzer durchgegangen (Erststart, Bibliothek, Download, Suche, Favoriten, Player, Einstellungen) und haben 39 Reibungspunkte gefunden. Erster Block: - Mehrfachauswahl lief nur im Lieder-/Favoriten-Reiter, nicht in Kategorie-/Künstler-/Album-Ansichten — jetzt überall, per geteilter auswahl_leiste.dart - Zwei unterschiedlich ausgestattete Favoriten-Listen (Tab vs. Playlisten) vereinheitlicht - Baka-Login zeigt Ladezustand + Fehler im Dialog statt bis zu 15s stumm zu bleiben (wie der Navidrome-Login) - Cache leeren, Navidrome-Abmelden, Download einzeln entfernen fragen jetzt nach - Download-Fehlermeldung bei toter Serververbindung nennt den echten Grund statt "War schon heruntergeladen" - YouTube-Fehlermeldungen sind jetzt rot statt neutralfarben - Suche schließt die Tastatur nach Auswahl, nennt den Suchbegriff bei "Nichts gefunden", einzelne Verlaufseinträge sind entfernbar - Icon-/Text-Korrekturen (Mikrofon-Icon fälschlich bei Speicherzugriff, "Online"-Tab existiert nicht, ReplayGain-Jargon) 537 Tests grün (vorher 533), flutter analyze ohne Befund.
71 lines
2.0 KiB
Dart
71 lines
2.0 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:melo/library/such_verlauf.dart';
|
|
|
|
/// Die Reihenfolge-Regeln des Verlaufs — ohne SharedPreferences prüfbar.
|
|
void main() {
|
|
group('verlaufMit', () {
|
|
test('legt den neuen Begriff nach vorn', () {
|
|
expect(verlaufMit(['neoni', 'rock'], 'trap'), ['trap', 'neoni', 'rock']);
|
|
});
|
|
|
|
test('ein erneut gesuchter Begriff wandert nach vorn statt sich zu doppeln',
|
|
() {
|
|
expect(verlaufMit(['neoni', 'rock'], 'rock'), ['rock', 'neoni']);
|
|
});
|
|
|
|
test('Groß- und Kleinschreibung gilt als derselbe Begriff', () {
|
|
expect(verlaufMit(['Rock'], 'rock'), ['rock']);
|
|
});
|
|
|
|
test('Leerraum am Rand zählt nicht mit', () {
|
|
expect(verlaufMit(['rock'], ' rock '), ['rock']);
|
|
});
|
|
|
|
test('deckelt bei acht Einträgen', () {
|
|
final voll = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'];
|
|
|
|
final neu = verlaufMit(voll, 'i');
|
|
|
|
expect(neu.length, 8);
|
|
expect(neu.first, 'i');
|
|
// Der älteste fällt hinten heraus.
|
|
expect(neu, isNot(contains('h')));
|
|
});
|
|
|
|
test('ein leerer Begriff ändert nichts', () {
|
|
expect(verlaufMit(['rock'], ' '), ['rock']);
|
|
});
|
|
|
|
test('lässt die Ausgangsliste unverändert', () {
|
|
final vorher = ['rock'];
|
|
|
|
verlaufMit(vorher, 'trap');
|
|
|
|
expect(vorher, ['rock']);
|
|
});
|
|
});
|
|
|
|
group('verlaufOhne', () {
|
|
test('entfernt genau den gesuchten Begriff', () {
|
|
expect(verlaufOhne(['trap', 'neoni', 'rock'], 'neoni'),
|
|
['trap', 'rock']);
|
|
});
|
|
|
|
test('Groß- und Kleinschreibung gilt als derselbe Begriff', () {
|
|
expect(verlaufOhne(['Rock', 'trap'], 'rock'), ['trap']);
|
|
});
|
|
|
|
test('ein nicht enthaltener Begriff ändert nichts', () {
|
|
expect(verlaufOhne(['rock'], 'trap'), ['rock']);
|
|
});
|
|
|
|
test('lässt die Ausgangsliste unverändert', () {
|
|
final vorher = ['rock', 'trap'];
|
|
|
|
verlaufOhne(vorher, 'rock');
|
|
|
|
expect(vorher, ['rock', 'trap']);
|
|
});
|
|
});
|
|
}
|