Files
ReelShort/test/theme/app_theme_test.dart
T

73 lines
2.4 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_approved_klein_blue_tokens', () {
expect(AppColors.blue, const Color(0xFF002FA7));
expect(AppColors.bluePressed, const Color(0xFF00227A));
expect(AppColors.blueSoft, const Color(0xFF5B7BE0));
expect(AppColors.onPrimary, const Color(0xFFFFFFFF));
});
test('should_meet_text_and_icon_contrast_when_using_theme_tokens', () {
expect(
_contrast(AppColors.onPrimary, AppColors.blue),
greaterThanOrEqualTo(4.5),
);
expect(_contrast(AppColors.blue, Colors.white), greaterThanOrEqualTo(4.5));
expect(
_contrast(AppColors.blueSoft, AppColors.ink),
greaterThanOrEqualTo(3),
);
});
test('should_use_klein_blue_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_klein_blue_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);
});
}