// 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_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_light_warm_orange_tokens', () { expect(AppColors.blue, const Color(0xFFFF7A1A)); expect(AppColors.bluePressed, const Color(0xFFFF6A00)); expect(AppColors.secondary, const Color(0xFFFF6A8A)); expect(AppColors.ink, const Color(0xFFFFF8F0)); expect(AppColors.surfaceTop, const Color(0xFFFFE9D6)); expect(AppColors.card, const Color(0xFFFFFFFF)); expect(AppColors.onSurface, const Color(0xFF1F1B16)); expect(AppColors.muted, const Color(0xFF8C837B)); expect(AppColors.subtle, const Color(0xFFB3AAA1)); expect(AppColors.border, const Color(0xFFF0E4D6)); expect(AppColors.badgePink, const Color(0xFFFFE3EC)); expect(AppColors.badgePinkText, const Color(0xFFFF6A8A)); }); test('should_keep_primary_text_readable_on_warm_background', () { expect( _contrast(AppColors.onSurface, AppColors.ink), greaterThanOrEqualTo(4.5), ); expect(_contrast(AppColors.muted, AppColors.card), greaterThanOrEqualTo(3)); }); test('should_use_light_color_scheme_and_dark_system_icons', () { final theme = AppTheme.light(); expect(theme.brightness, Brightness.light); expect(theme.colorScheme.primary, AppColors.blue); expect(theme.colorScheme.onPrimary, AppColors.onPrimary); 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.systemOverlayStyle, SystemUiOverlayStyle.dark); }); test('should_use_ink_navigation_bar_without_contrast_scrim', () { expect(appSystemOverlayStyle.statusBarColor, Colors.transparent); expect(appSystemOverlayStyle.systemNavigationBarColor, AppColors.ink); expect( appSystemOverlayStyle.systemNavigationBarDividerColor, Colors.transparent, ); expect( appSystemOverlayStyle.systemNavigationBarIconBrightness, Brightness.dark, ); expect(appSystemOverlayStyle.systemNavigationBarContrastEnforced, isFalse); final sheetTheme = AppTheme.light().bottomSheetTheme; expect(sheetTheme.backgroundColor, Colors.transparent); expect(sheetTheme.modalBackgroundColor, Colors.transparent); expect(sheetTheme.surfaceTintColor, Colors.transparent); }); test('should_expose_page_gradient_and_soft_card_shadow', () { expect(AppTheme.pageGradient.colors, [AppColors.surfaceTop, AppColors.ink]); expect(AppTheme.cardShadow.color, AppColors.cardShadow); expect(AppTheme.cardShadow.blurRadius, 18); expect(AppTheme.cardShadow.offset, const Offset(0, 6)); }); }