ReadViewSDK/scripts/run_ui_regression.sh
shen 6f75b083f7 feat: EPUB 阅读器搜索、选中注释、书签 chrome 状态及大量重构优化
- 新增 RDEPUBReaderSearchCoordinator 与 RDEPUBSelectionState 管理搜索和选中状态
- 新增 BookmarkChromeStateTests、NavigationBackwardTests、SelectionAnnotateTests 等 UI 测试
- 新增多个边界测试 epub 样本(损坏结构、空归档、缺失文件、流式外链验证)
- 重构阅读器 chrome 状态管理,统一 tool bar 与 search bar 交互
- 优化大书分页缓存策略(RDEPUBChapterSummaryDiskCache、RDEPUBPageCountCache)
- 移除废弃的 RDEPUBLocationConverter 和 RDEPUBPageBreakPolicy
- 更新 epub-bridge.js 与 JS bridge 通信协议
- 全面更新现有 UI 测试以适配新的 helper 和状态管理
2026-06-13 22:48:56 +08:00

172 lines
4.3 KiB
Bash
Executable File

#!/usr/bin/env bash
set -u
set -o pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
PROJECT_PATH="${PROJECT_PATH:-$ROOT_DIR/ReadViewDemo/ReadViewDemo.xcworkspace}"
SCHEME_NAME="${SCHEME_NAME:-ReadViewDemo}"
CONFIGURATION="${CONFIGURATION:-Debug}"
SIMULATOR_NAME="${SIMULATOR_NAME:-iPhone 16 Plus}"
DESTINATION="${DESTINATION:-platform=iOS Simulator,name=${SIMULATOR_NAME}}"
RESULTS_ROOT="${RESULTS_ROOT:-$ROOT_DIR/.artifacts/ui-tests}"
DERIVED_DATA_PATH="${DERIVED_DATA_PATH:-$RESULTS_ROOT/DerivedData}"
ONLY_TESTING="${ONLY_TESTING:-}"
TEST_PLAN="${TEST_PLAN:-}"
TEST_TYPE_ARG="${1:-}"
TEST_TYPE="${TEST_TYPE:-${TEST_TYPE_ARG:-quick}}"
TIMESTAMP="$(date +"%Y%m%d-%H%M%S")"
RUN_DIR="$RESULTS_ROOT/$TIMESTAMP"
XCRESULT_PATH="$RUN_DIR/ReadViewDemoUITests.xcresult"
RAW_LOG_PATH="$RUN_DIR/xcodebuild.log"
REPORT_MD_PATH="$RUN_DIR/UI-Test-Report.md"
REPORT_JSON_PATH="$RUN_DIR/ui-test-results.json"
REPORT_TXT_PATH="$RUN_DIR/summary.txt"
SUMMARY_SCRIPT="$ROOT_DIR/scripts/summarize_ui_results.py"
TARGET_NAME="ReadViewDemoUITests"
QUICK_TESTS=(
ArchivePathValidationTests
BookmarkChromeStateTests
BookmarkManagementTests
BookmarkTests
CacheHardeningTests
DisplayTypeTests
ErrorAndEdgeCaseTests
ExternalLinkPolicyTests
HighlightsManagementTests
LocationPersistenceTests
NavigationBackwardTests
PageNavigationTests
ReaderAnnotationExtendedTests
ReaderAnnotationTests
ReaderOpenCloseTests
ReaderToolbarTests
SearchTests
SelectionAnnotateTests
SelectionMenuTests
SettingsEffectTests
SettingsExtendedTests
SettingsPanelTests
TOCInteractionTests
TableOfContentsTests
ToolbarStateTests
)
LARGE_BOOK_TESTS=(
ConfigurableWindowTests
ConcurrentParsingTests
LargeBookOnDemandTests
)
PERFORMANCE_TESTS=(
FanrenParseTimeTest
MetadataParseBenchmarkTests
)
mkdir -p "$RUN_DIR" "$DERIVED_DATA_PATH"
append_only_testing_items() {
local raw_list="$1"
local item
IFS=',' read -r -a ONLY_TESTING_ITEMS <<< "$raw_list"
for item in "${ONLY_TESTING_ITEMS[@]}"; do
local trimmed_item
trimmed_item="$(echo "$item" | xargs)"
if [[ -n "$trimmed_item" ]]; then
XCODEBUILD_ARGS+=(-only-testing:"$trimmed_item")
fi
done
}
apply_test_type_filter() {
local selected_type="$1"
local test_name
case "$selected_type" in
quick)
for test_name in "${QUICK_TESTS[@]}"; do
XCODEBUILD_ARGS+=(-only-testing:"$TARGET_NAME/$test_name")
done
;;
large-book)
for test_name in "${LARGE_BOOK_TESTS[@]}"; do
XCODEBUILD_ARGS+=(-only-testing:"$TARGET_NAME/$test_name")
done
;;
performance)
for test_name in "${PERFORMANCE_TESTS[@]}"; do
XCODEBUILD_ARGS+=(-only-testing:"$TARGET_NAME/$test_name")
done
;;
all)
;;
*)
echo "Unsupported TEST_TYPE: $selected_type" >&2
echo "Supported values: quick, large-book, performance, all" >&2
exit 2
;;
esac
}
echo "UI regression run"
echo " project: $PROJECT_PATH"
echo " scheme: $SCHEME_NAME"
echo " configuration:$CONFIGURATION"
echo " destination: $DESTINATION"
echo " test type: $TEST_TYPE"
echo " results: $RUN_DIR"
if [[ "$PROJECT_PATH" == *.xcworkspace ]]; then
PROJECT_FLAG="-workspace"
else
PROJECT_FLAG="-project"
fi
XCODEBUILD_ARGS=(
xcodebuild
test
"$PROJECT_FLAG" "$PROJECT_PATH"
-scheme "$SCHEME_NAME"
-configuration "$CONFIGURATION"
-destination "$DESTINATION"
-resultBundlePath "$XCRESULT_PATH"
-derivedDataPath "$DERIVED_DATA_PATH"
)
if [[ -n "$TEST_PLAN" ]]; then
XCODEBUILD_ARGS+=(-testPlan "$TEST_PLAN")
fi
if [[ -n "$ONLY_TESTING" ]]; then
append_only_testing_items "$ONLY_TESTING"
else
apply_test_type_filter "$TEST_TYPE"
fi
set +e
"${XCODEBUILD_ARGS[@]}" 2>&1 | tee "$RAW_LOG_PATH"
TEST_EXIT_CODE=${PIPESTATUS[0]}
set -e
python3 "$SUMMARY_SCRIPT" \
--xcresult "$XCRESULT_PATH" \
--raw-log "$RAW_LOG_PATH" \
--output-md "$REPORT_MD_PATH" \
--output-json "$REPORT_JSON_PATH" \
--output-txt "$REPORT_TXT_PATH" \
--test-type "$TEST_TYPE" \
--xcodebuild-exit-code "$TEST_EXIT_CODE"
echo
cat "$REPORT_TXT_PATH"
echo
echo "Artifacts"
echo " summary: $REPORT_TXT_PATH"
echo " report: $REPORT_MD_PATH"
echo " json: $REPORT_JSON_PATH"
echo " xcresult: $XCRESULT_PATH"
echo " raw log: $RAW_LOG_PATH"
exit "$TEST_EXIT_CODE"