85 lines
2.9 KiB
Dart
85 lines
2.9 KiB
Dart
// 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(0xFF1B1C21));
|
|
expect(AppColors.cardAlt, const Color(0xFF1C1D21));
|
|
expect(AppColors.raised, const Color(0xFF1C1D21));
|
|
expect(AppColors.bar, const Color(0xFF0D0D11));
|
|
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);
|
|
});
|
|
}
|