97 lines
3.9 KiB
Dart
97 lines
3.9 KiB
Dart
// Author: fruit.com.cn
|
|
|
|
import 'dart:math';
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter/services.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:fruitshorts/app.dart';
|
|
import 'package:fruitshorts/core/theme/app_colors.dart';
|
|
import 'package:fruitshorts/core/theme/app_dimens.dart';
|
|
import 'package:fruitshorts/core/theme/app_theme.dart';
|
|
|
|
double _contrast(Color foreground, Color background) {
|
|
final first = foreground.computeLuminance();
|
|
final second = background.computeLuminance();
|
|
return (max(first, second) + 0.05) / (min(first, second) + 0.05);
|
|
}
|
|
|
|
void main() {
|
|
test('should_expose_dark_visual_tokens', () {
|
|
expect(AppColors.blue, const Color(0xFFFF6B2C));
|
|
expect(AppColors.bluePressed, const Color(0xFFE55A1F));
|
|
expect(AppColors.secondary, const Color(0xFF22D3EE));
|
|
expect(AppColors.ink, const Color(0xFF0B1020));
|
|
expect(AppColors.card, const Color(0xFF151B2E));
|
|
expect(AppColors.raised, const Color(0xFF1C2436));
|
|
expect(AppColors.border, const Color(0x0FFFFFFF));
|
|
expect(AppColors.onSurface, const Color(0xEBFFFFFF));
|
|
expect(AppColors.muted, const Color(0xA3FFFFFF));
|
|
expect(AppColors.subtle, const Color(0x61FFFFFF));
|
|
expect(AppDimens.cardRadius, 12);
|
|
expect(AppDimens.buttonRadius, 10);
|
|
expect(AppDimens.inputRadius, 10);
|
|
expect(AppDimens.chipRadius, 6);
|
|
});
|
|
|
|
test('should_keep_primary_and_secondary_text_readable_on_dark', () {
|
|
expect(
|
|
_contrast(AppColors.onSurface, AppColors.ink),
|
|
greaterThanOrEqualTo(4.5),
|
|
);
|
|
expect(
|
|
_contrast(AppColors.onSurface, AppColors.card),
|
|
greaterThanOrEqualTo(4.5),
|
|
);
|
|
expect(_contrast(AppColors.muted, AppColors.card), greaterThanOrEqualTo(3));
|
|
expect(_contrast(AppColors.gold, AppColors.ink), greaterThanOrEqualTo(3));
|
|
expect(_contrast(AppColors.blue, AppColors.ink), greaterThanOrEqualTo(3));
|
|
});
|
|
|
|
test('should_use_dark_color_scheme_and_light_system_icons', () {
|
|
final theme = AppTheme.dark();
|
|
|
|
expect(theme.brightness, Brightness.dark);
|
|
expect(theme.colorScheme.primary, AppColors.blue);
|
|
expect(theme.colorScheme.onPrimary, AppColors.onPrimary);
|
|
expect(theme.colorScheme.secondary, AppColors.secondary);
|
|
expect(theme.colorScheme.surface, AppColors.ink);
|
|
expect(theme.colorScheme.onSurface, AppColors.onSurface);
|
|
expect(theme.colorScheme.outline, AppColors.border);
|
|
expect(theme.scaffoldBackgroundColor, AppColors.ink);
|
|
expect(theme.appBarTheme.backgroundColor, AppColors.card);
|
|
expect(theme.appBarTheme.systemOverlayStyle, SystemUiOverlayStyle.light);
|
|
expect(theme.cardTheme.elevation, 0);
|
|
expect(theme.dialogTheme.backgroundColor, AppColors.raised);
|
|
expect(theme.bottomNavigationBarTheme.backgroundColor, AppColors.bar);
|
|
expect(theme.inputDecorationTheme.fillColor, AppColors.input);
|
|
});
|
|
|
|
test('should_use_ink_navigation_bar_with_light_icons', () {
|
|
expect(appSystemOverlayStyle.statusBarColor, Colors.transparent);
|
|
expect(appSystemOverlayStyle.statusBarIconBrightness, Brightness.light);
|
|
expect(appSystemOverlayStyle.systemNavigationBarColor, AppColors.ink);
|
|
expect(
|
|
appSystemOverlayStyle.systemNavigationBarDividerColor,
|
|
Colors.transparent,
|
|
);
|
|
expect(
|
|
appSystemOverlayStyle.systemNavigationBarIconBrightness,
|
|
Brightness.light,
|
|
);
|
|
expect(appSystemOverlayStyle.systemNavigationBarContrastEnforced, isFalse);
|
|
|
|
final sheetTheme = AppTheme.dark().bottomSheetTheme;
|
|
expect(sheetTheme.backgroundColor, Colors.transparent);
|
|
expect(sheetTheme.modalBackgroundColor, Colors.transparent);
|
|
expect(sheetTheme.surfaceTintColor, Colors.transparent);
|
|
});
|
|
|
|
test('should_expose_flat_page_gradient_without_card_shadow', () {
|
|
expect(AppTheme.pageGradient.colors, [AppColors.surfaceTop, AppColors.ink]);
|
|
expect(AppTheme.cardShadow.color, AppColors.cardShadow);
|
|
expect(AppTheme.cardShadow.blurRadius, 0);
|
|
expect(AppTheme.cardShadow.offset, Offset.zero);
|
|
});
|
|
}
|