dbd183ee00
发现:CI flutter analyze 退出码 1(1204 个 info,0 error/warning),其中 1191 来自 第三方 vendored 包 lucide_icons_patched —— 这道闸一直红/无效。 - analysis_options.yaml:exclude packages/lucide_icons_patched/**(去 1191 噪音) - ci.yml:flutter analyze --no-fatal-infos(info 是建议级不该硬挡 merge; error/warning 仍致命)→ analyze EXIT 0、闸真正可用 - 顺手清 11 个 clean 文件 info:auth_api 删 >>>AUTHLOG 调试 print 残留(+unused sw)、 account_page/plan_card withOpacity→withValues、vpn_bridge where(is Map)→whereType、 测试文件删多余 import + final→const - 剩 2 个 info 在 stats-overhaul dirty 文件(stats_page/device_stat_row),留其合并清 - 验证:flutter analyze --no-fatal-infos EXIT 0(1204→2)、flutter test 48 全过 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
39 lines
1.6 KiB
Dart
39 lines
1.6 KiB
Dart
// flutter_test_config.dart — 全测试前置(Flutter 自动应用于 test/ 下所有测试)。
|
|
//
|
|
// 启用 PangolinFonts.useBundled,并用 FontLoader 注册 test/fonts/ 的真实字体,
|
|
// 让 widget/golden 测试用真字体渲染、且不触发 google_fonts 运行时拉取(避免抛异常)。
|
|
import 'dart:async';
|
|
import 'dart:io';
|
|
|
|
import 'package:flutter/services.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:pangolin_vpn/pangolin_theme.dart';
|
|
|
|
Future<void> testExecutable(FutureOr<void> Function() testMain) async {
|
|
TestWidgetsFlutterBinding.ensureInitialized();
|
|
PangolinFonts.useBundled = true;
|
|
await _load('Sora', const ['test/fonts/Sora-Regular.ttf', 'test/fonts/Sora-SemiBold.ttf', 'test/fonts/Sora-Bold.ttf']);
|
|
await _load('Manrope', const [
|
|
'test/fonts/Manrope-Regular.ttf',
|
|
'test/fonts/Manrope-Medium.ttf',
|
|
'test/fonts/Manrope-SemiBold.ttf',
|
|
'test/fonts/Manrope-Bold.ttf',
|
|
]);
|
|
await _load('JetBrains Mono', const ['test/fonts/JetBrainsMono-Regular.ttf']);
|
|
// Lucide 图标字体(family 须带 package 前缀以匹配 PangolinIcons 的 fontPackage)。
|
|
await _load('packages/lucide_icons/Lucide', const ['packages/lucide_icons_patched/fonts/lucide.ttf']);
|
|
await testMain();
|
|
}
|
|
|
|
Future<void> _load(String family, List<String> paths) async {
|
|
final loader = FontLoader(family);
|
|
for (final p in paths) {
|
|
final file = File(p);
|
|
if (file.existsSync()) {
|
|
final bytes = file.readAsBytesSync();
|
|
loader.addFont(Future.value(ByteData.view(bytes.buffer, bytes.offsetInBytes, bytes.lengthInBytes)));
|
|
}
|
|
}
|
|
await loader.load();
|
|
}
|