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.
66 lines
2.5 KiB
Dart
66 lines
2.5 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:melo/shared/theme.dart';
|
|
|
|
/// Die Bildschirm-Überschriften setzten ihre Größe von Hand, während das
|
|
/// Theme eine eigene Stufe dafür vorhielt — die nie benutzt wurde. Diese
|
|
/// Regeln halten die Stufenleiter zusammen.
|
|
void main() {
|
|
final texte = MeloTheme.dark.textTheme;
|
|
|
|
double groesse(TextStyle? s) => s!.fontSize!;
|
|
double laufweite(TextStyle? s) => s!.letterSpacing ?? 0;
|
|
|
|
group('Stufenleiter', () {
|
|
test('wird von oben nach unten kleiner', () {
|
|
expect(groesse(texte.displaySmall),
|
|
greaterThan(groesse(texte.headlineSmall)));
|
|
expect(groesse(texte.headlineSmall),
|
|
greaterThan(groesse(texte.titleMedium)));
|
|
expect(groesse(texte.titleMedium), greaterThan(groesse(texte.bodyLarge)));
|
|
expect(groesse(texte.bodyLarge), greaterThan(groesse(texte.bodyMedium)));
|
|
expect(groesse(texte.bodyMedium), greaterThan(groesse(texte.bodySmall)));
|
|
});
|
|
|
|
test('Fließtext bleibt bei mindestens 12', () {
|
|
// Darunter wird es auf einem Telefon unlesbar, unabhängig vom Kontrast.
|
|
expect(groesse(texte.bodySmall), greaterThanOrEqualTo(12));
|
|
});
|
|
});
|
|
|
|
group('Laufweite', () {
|
|
test('große Überschriften stehen enger', () {
|
|
// Bei großen Graden wirken die Abstände optisch zu weit; ein leicht
|
|
// negativer Wert lässt die Zeile als Einheit lesen.
|
|
expect(laufweite(texte.displaySmall), lessThan(0));
|
|
expect(laufweite(texte.headlineSmall), lessThan(0));
|
|
});
|
|
|
|
test('die Abschnitts-Beschriftung steht weiter', () {
|
|
// Sie wird in Großbuchstaben gesetzt, und die brauchen mehr Luft.
|
|
expect(laufweite(texte.labelLarge), greaterThan(0));
|
|
});
|
|
|
|
test('Fließtext bleibt unangetastet', () {
|
|
expect(laufweite(texte.bodyLarge), 0);
|
|
expect(laufweite(texte.bodyMedium), 0);
|
|
});
|
|
});
|
|
|
|
group('Gewichte', () {
|
|
test('Überschriften sind kräftiger als Fließtext', () {
|
|
expect(texte.displaySmall!.fontWeight!.value,
|
|
greaterThan(texte.bodyLarge!.fontWeight?.value ?? 400));
|
|
});
|
|
});
|
|
|
|
test('die Titelleiste folgt derselben Stufe wie eine Überschrift', () {
|
|
// Sonst hätte derselbe Rang zwei verschiedene Schriftbilder.
|
|
final leiste = MeloTheme.dark.appBarTheme.titleTextStyle!;
|
|
|
|
expect(leiste.fontSize, groesse(texte.headlineSmall));
|
|
expect(leiste.letterSpacing, laufweite(texte.headlineSmall));
|
|
expect(leiste.fontWeight, texte.headlineSmall!.fontWeight);
|
|
});
|
|
}
|