Initial commit: suixinkan_ios UIKit rewrite project.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
95
suixinkan_ios/App/AppUITestRouteDriver.swift
Normal file
95
suixinkan_ios/App/AppUITestRouteDriver.swift
Normal file
@ -0,0 +1,95 @@
|
||||
//
|
||||
// AppUITestRouteDriver.swift
|
||||
// suixinkan
|
||||
//
|
||||
// Created by Codex on 2026/6/26.
|
||||
//
|
||||
|
||||
#if DEBUG
|
||||
import UIKit
|
||||
|
||||
/// UI Test 专用路由直达器,通过启动参数打开目标页,绕开自定义 TabBar 下 XCUITest 难以触发的 push。
|
||||
@MainActor
|
||||
enum AppUITestRouteDriver {
|
||||
private static var didApply = false
|
||||
|
||||
/// 根据启动参数跳转到指定首页菜单或个人中心页面。
|
||||
static func applyIfNeeded(services: AppServices = .shared) async {
|
||||
guard AppUITestLaunchState.isRunningUITests, !didApply else { return }
|
||||
guard AppUITestLaunchState.pendingMenuTitle != nil
|
||||
|| AppUITestLaunchState.pendingProfileRouteRawValue != nil else { return }
|
||||
|
||||
didApply = true
|
||||
try? await Task.sleep(nanoseconds: 1_200_000_000)
|
||||
|
||||
if let menuTitle = AppUITestLaunchState.pendingMenuTitle {
|
||||
openHomeMenu(title: menuTitle, services: services)
|
||||
return
|
||||
}
|
||||
|
||||
if let rawValue = AppUITestLaunchState.pendingProfileRouteRawValue {
|
||||
openProfileRoute(rawValue: rawValue, services: services)
|
||||
}
|
||||
}
|
||||
|
||||
/// 打开首页调试目录中的指定菜单。
|
||||
private static func openHomeMenu(title: String, services: AppServices) {
|
||||
let resolvedTitle = resolveMenuTitle(title)
|
||||
guard let item = HomeMenuRouter.debugAllMenuItems().first(where: { $0.title == resolvedTitle }) else {
|
||||
return
|
||||
}
|
||||
|
||||
services.appRouter.reset()
|
||||
let resolved = HomeMenuRouter.resolve(uri: item.uri, title: item.title)
|
||||
switch resolved {
|
||||
case .tab(let tab):
|
||||
services.appRouter.select(tab)
|
||||
case .orders(let entry):
|
||||
services.appRouter.selectOrders(entry: entry)
|
||||
case .destination(let homeRoute):
|
||||
services.appRouter.navigateHome(homeRoute, animated: false)
|
||||
case .unsupported(let uri, let title, _):
|
||||
services.appRouter.navigateHome(.modulePlaceholder(uri: uri, title: title), animated: false)
|
||||
case .placeholder(let uri, let title):
|
||||
services.appRouter.navigateHome(.modulePlaceholder(uri: uri, title: title), animated: false)
|
||||
}
|
||||
}
|
||||
|
||||
/// 打开个人中心二级页面。
|
||||
private static func openProfileRoute(rawValue: String, services: AppServices) {
|
||||
let route: ProfileRoute?
|
||||
switch rawValue {
|
||||
case "settings":
|
||||
route = .settings
|
||||
case "realNameAuth":
|
||||
route = .realNameAuth
|
||||
case "accountSwitch":
|
||||
route = .accountSwitch
|
||||
case "debugHomeMenus":
|
||||
route = .debugHomeMenus
|
||||
case "agreement.about":
|
||||
route = .agreement(.about)
|
||||
case "agreement.userAgreement":
|
||||
route = .agreement(.userAgreement)
|
||||
case "agreement.privacyPolicy":
|
||||
route = .agreement(.privacyPolicy)
|
||||
default:
|
||||
route = nil
|
||||
}
|
||||
|
||||
guard let route else { return }
|
||||
services.appRouter.reset()
|
||||
services.appRouter.navigateProfile(route, animated: false)
|
||||
}
|
||||
|
||||
/// 将 UI Test 用例菜单名映射为调试目录标题。
|
||||
private static func resolveMenuTitle(_ title: String) -> String {
|
||||
switch title {
|
||||
case "系统设置":
|
||||
return "设置中心"
|
||||
default:
|
||||
return title
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user