#!/usr/bin/env bash # 客户端测试入口 —— 唯一目的是**把代理变量清干净**。 # # 为什么必须清:flutter_test 会拉起 flutter_tester 进程并用**本地 WebSocket** 通信。 # 本机(Xray/AdGuard)导出的 HTTP_PROXY/ALL_PROXY 会让 localhost 也走代理, # 于是测试在"加载阶段"就失败,报: # Unable to connect to flutter_tester process: # WebSocketException: Invalid WebSocket upgrade request # 这个报错**看起来像代码错误**(甚至显示不出来是哪一行的错),实际是环境问题, # 已两次让本项目的测试"无故变红"。故固定成一个入口,别再手敲 env -u。 # # 用法: # bash scripts/test.sh # 跑全部客户端测试 # bash scripts/test.sh test/viewer_page_test.dart # # 可用 FLUTTER_BIN 指定 flutter:FLUTTER_BIN=/path/to/flutter bash scripts/test.sh # # ── 已登记测试清单(Phase 3b 补)──────────────────────────────────── # `flutter test` 无参时会自动发现 test/*_test.dart;下面这份清单不是为了 # 替代自动发现,而是为了守住「新增测试文件必须登记」这条纪律 —— # theme_guard_test.dart 的 _uiFiles 已两次因漏登记让几百行界面代码 # 不受护栏保护。默认全量跑之前做一次反向检查:出现清单外的 *_test.dart # 就报错,逼迫显式登记后再跑。 # 本轮新增登记:token_parity_test.dart(CSS ↔ Dart 令牌双向护栏,05 §3.5 ④)。 set -euo pipefail cd "$(dirname "$0")/.." FLUTTER="${FLUTTER_BIN:-$HOME/development/flutter/bin/flutter}" if [ ! -x "$FLUTTER" ]; then echo "未找到 flutter:$FLUTTER" >&2 echo "可用 FLUTTER_BIN=/path/to/flutter 指定" >&2 exit 1 fi REGISTERED_TESTS=( account_security_test.dart account_test.dart adaptive_unit_test.dart agent_lock_test.dart agent_probe_test.dart app_paths_test.dart autostart_runner_test.dart boot_report_test.dart clock_test.dart config_change_test.dart config_migration_test.dart dark_theme_test.dart dark_ui_test.dart device_merge_notice_test.dart device_model_test.dart eink_board_test.dart event_reporter_test.dart handover_test.dart history_test.dart host_ffi_test.dart idle_sampling_test.dart install_paths_test.dart installer_launch_note_test.dart installer_status_json_test.dart lan_service_test.dart link_hub_test.dart link_mode_test.dart metric_format_test.dart p2p_driver_test.dart p2p_session_test.dart pairing_card_test.dart plan_text_guard_test.dart relay_driver_test.dart resident_card_test.dart resident_service_test.dart scaled_unit_test.dart skeleton_test.dart startup_log_test.dart startup_path_test.dart stun_test.dart symbol_guard_test.dart theme_guard_test.dart token_parity_test.dart transfer_card_test.dart viewer_page_test.dart viewer_test.dart ) # 只在「默认全量跑」时校验:显式传文件参数时保持原样透传 if [ "$#" -eq 0 ]; then shopt -s nullglob for f in test/*_test.dart; do base="$(basename "$f")" found=0 for r in "${REGISTERED_TESTS[@]}"; do if [ "$r" = "$base" ]; then found=1; break; fi done if [ "$found" -eq 0 ]; then echo "未登记的测试文件:$f" >&2 echo "请把 $base 加进 scripts/test.sh 的 REGISTERED_TESTS 清单后再跑" >&2 exit 1 fi done fi exec env \ -u HTTP_PROXY -u HTTPS_PROXY -u ALL_PROXY \ -u http_proxy -u https_proxy -u all_proxy \ -u NO_PROXY -u no_proxy \ "$FLUTTER" test "$@"