// Author: fruit.com.cn import 'dart:math'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.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_obsidian_flare_brand_tokens', () { expect(AppColors.blue, const Color(0xFFFF5B3D)); expect(AppColors.bluePressed, const Color(0xFFFF4321)); expect(AppColors.blueSoft, const Color(0xFF9278EA)); expect(AppColors.secondary, const Color(0xFF9278EA)); expect(AppColors.gold, const Color(0xFFFBBF24)); expect(AppColors.ink, const Color(0xFF0B0C10)); expect(AppColors.card, const Color(0xFF16181F)); expect(AppColors.raised, const Color(0xFF1D1E28)); expect(AppColors.success, const Color(0xFF34D399)); expect(AppColors.onPrimary, const Color(0xFFFFFFFF)); expect( _contrast(AppColors.onGold, AppColors.gold), greaterThanOrEqualTo(4.5), ); }); test('should_meet_text_and_icon_contrast_when_using_theme_tokens', () { expect( _contrast(AppColors.onPrimary, AppColors.blue), greaterThanOrEqualTo(3), ); expect(_contrast(AppColors.blue, Colors.white), greaterThanOrEqualTo(3)); expect( _contrast(AppColors.blueSoft, AppColors.ink), greaterThanOrEqualTo(3), ); }); test('should_use_flare_brand_in_light_and_dark_color_schemes', () { for (final theme in [AppTheme.light(), AppTheme.dark()]) { expect(theme.colorScheme.primary, AppColors.blue); expect(theme.colorScheme.onPrimary, AppColors.onPrimary); } }); test('should_define_non_white_outline_tokens_in_both_themes', () { final light = AppTheme.light().colorScheme; final dark = AppTheme.dark().colorScheme; expect(light.outline, AppColors.outlineLight); expect(light.outlineVariant, AppColors.outlineVariantLight); expect(dark.outline, AppColors.outlineDark); expect(dark.outlineVariant, AppColors.outlineVariantDark); expect(dark.outlineVariant.computeLuminance(), lessThan(0.2)); expect(light.outlineVariant.computeLuminance(), lessThan(0.92)); }); testWidgets('should_expose_chili_brand_through_widget_theme', (tester) async { late ThemeData applied; await tester.pumpWidget( MaterialApp( theme: AppTheme.dark(), home: Builder( builder: (context) { applied = Theme.of(context); return const SizedBox.shrink(); }, ), ), ); expect(applied.colorScheme.primary, AppColors.blue); expect(applied.colorScheme.onPrimary, AppColors.onPrimary); }); }