P3-Liste aus dem UX-Review: Player nimmt Cover-Farbe auf, "Teilen" aus YouTube trägt die Adresse in den Downloader ein, Android Auto blättert durch die Bibliothek, Laufweite der Typografie geschärft, Überschriften vereinheitlicht. 533 Tests grün, flutter analyze ohne Befund.
80 lines
2.4 KiB
Dart
80 lines
2.4 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:melo/player/auto_browse.dart';
|
|
|
|
/// Im Auto und beim Sprachassistenten blättert man durch die Bibliothek,
|
|
/// statt die App zu bedienen. Jeder Knoten braucht dafür eine Adresse, die
|
|
/// hin und zurück eindeutig ist.
|
|
void main() {
|
|
group('knotenId und knotenAus', () {
|
|
test('eine Ordner-Adresse ohne Namen kommt unverändert zurück', () {
|
|
final id = knotenId(AutoArt.favoriten);
|
|
|
|
final knoten = knotenAus(id);
|
|
|
|
expect(knoten!.art, AutoArt.favoriten);
|
|
expect(knoten.name, isNull);
|
|
});
|
|
|
|
test('ein Name übersteht den Weg hin und zurück', () {
|
|
final id = knotenId(AutoArt.kategorie, 'Trap cool');
|
|
|
|
final knoten = knotenAus(id);
|
|
|
|
expect(knoten!.art, AutoArt.kategorie);
|
|
expect(knoten.name, 'Trap cool');
|
|
});
|
|
|
|
test('Doppelpunkte im Namen zerlegen die Adresse nicht', () {
|
|
// "Intro: Der Anfang" ist ein völlig normaler Albumtitel — und der
|
|
// Doppelpunkt ist zugleich unser Trennzeichen.
|
|
final knoten = knotenAus(knotenId(AutoArt.kategorie, 'Intro: Anfang'));
|
|
|
|
expect(knoten!.name, 'Intro: Anfang');
|
|
});
|
|
|
|
test('Schrägstriche und Umlaute überstehen es ebenfalls', () {
|
|
const name = 'AC/DC — Küchenlieder';
|
|
|
|
expect(knotenAus(knotenId(AutoArt.kuenstler, name))!.name, name);
|
|
});
|
|
|
|
test('ein Titel trägt seine Song-UUID', () {
|
|
final knoten = knotenAus(knotenId(AutoArt.titel, 'uuid-1'));
|
|
|
|
expect(knoten!.art, AutoArt.titel);
|
|
expect(knoten.name, 'uuid-1');
|
|
});
|
|
|
|
test('eine fremde Adresse ergibt nichts', () {
|
|
expect(knotenAus('irgendwas'), isNull);
|
|
expect(knotenAus(''), isNull);
|
|
expect(knotenAus('melo:gibtesnicht'), isNull);
|
|
});
|
|
});
|
|
|
|
group('wurzelArten', () {
|
|
test('bietet die vier Wege an, die auch die App hat', () {
|
|
expect(wurzelArten, [
|
|
AutoArt.favoriten,
|
|
AutoArt.zuletzt,
|
|
AutoArt.kategorien,
|
|
AutoArt.kuenstlerListe,
|
|
]);
|
|
});
|
|
|
|
test('jede Wurzel hat einen Namen für die Anzeige', () {
|
|
for (final art in wurzelArten) {
|
|
expect(art.anzeige, isNotEmpty);
|
|
}
|
|
});
|
|
|
|
test('die Wurzeln sind Ordner, keine Titel', () {
|
|
// Ein Ordner darf nicht abspielbar sein, sonst versucht das Auto ihn
|
|
// als Lied zu starten.
|
|
for (final art in wurzelArten) {
|
|
expect(art == AutoArt.titel, isFalse);
|
|
}
|
|
});
|
|
});
|
|
}
|