// // AppUITestRouteDriver.swift // suixinkan // // Created by Codex on 2026/6/26. // #if DEBUG import UIKit /// UI Test 专用路由直达器,通过启动参数打开目标页,绕开 Tab 切换与 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.appNavigator.resetAllStacks() let resolved = HomeMenuRouter.resolve(uri: item.uri, title: item.title) switch resolved { case .tab(let tab): services.appNavigator.selectTab(tab) case .orders(let entry): services.appNavigator.openOrdersEntry(entry) case .destination(let homeRoute): services.appNavigator.openHome(homeRoute, policy: .tabRoot(.home), animated: false) case .unsupported(let uri, let title, _): services.appNavigator.openHome(.modulePlaceholder(uri: uri, title: title), policy: .tabRoot(.home), animated: false) case .placeholder(let uri, let title): services.appNavigator.openHome(.modulePlaceholder(uri: uri, title: title), policy: .tabRoot(.home), 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.appNavigator.resetAllStacks() services.appNavigator.openProfile(route, policy: .tabRoot(.profile), animated: false) } /// 将 UI Test 用例菜单名映射为调试目录标题。 private static func resolveMenuTitle(_ title: String) -> String { switch title { case "系统设置": return "设置中心" default: return title } } } #endif