// // HomeMenuIconFactoryTests.swift // suixinkanTests // import UIKit import XCTest @testable import suixinkan /// 首页菜单图标加载测试。 final class HomeMenuIconFactoryTests: XCTestCase { func testAssetIconTakesPrecedence() { let image = HomeMenuIconFactory.image(named: "home_menu_space") XCTAssertNotNil(image) XCTAssertEqual(image?.size, HomeMenuIconFactory.canvasSize) XCTAssertNil(UIImage(systemName: "home_menu_space")) } func testSystemSymbolsUseFixedCanvas() { let iconNames = [ "ellipsis", "dot.radiowaves.left.and.right", "rectangle.stack.badge.plus", ] for iconName in iconNames { let image = HomeMenuIconFactory.image(named: iconName) XCTAssertNotNil(image) XCTAssertEqual(image?.size, HomeMenuIconFactory.canvasSize) XCTAssertEqual(image?.renderingMode, .alwaysTemplate) XCTAssertFalse(image?.isSymbolImage ?? true) } } func testComplexSystemSymbolResolves() { XCTAssertNotNil(HomeMenuIconFactory.image(named: "dot.radiowaves.left.and.right")) XCTAssertNotNil(HomeMenuIconFactory.image(named: "rectangle.stack.badge.plus")) } } /// 首页常用应用 cell 的图标布局与复用测试。 @MainActor final class HomeMenuCellTests: XCTestCase { func testIconKeepsFixedSizeWhenReusedAtIPhoneXWidth() throws { let cell = HomeMenuCell(frame: CGRect(x: 0, y: 0, width: 109, height: 109)) let menus = [ HomeMenuItem(uri: "space", title: "空间设置", iconName: "home_menu_space"), HomeMenuItem(uri: "live", title: "直播管理", iconName: "dot.radiowaves.left.and.right"), HomeMenuItem(uri: "more", title: "更多功能", iconName: "ellipsis"), ] for menu in menus { cell.prepareForReuse() cell.apply(menu: menu) cell.setNeedsLayout() cell.layoutIfNeeded() let iconView = try XCTUnwrap(findImageView(in: cell, identifier: menu.iconName)) XCTAssertEqual(iconView.bounds.size, CGSize(width: 24, height: 24)) XCTAssertEqual(iconView.superview?.bounds.size, CGSize(width: 40, height: 40)) XCTAssertEqual(iconView.image?.size, HomeMenuIconFactory.canvasSize) XCTAssertEqual(iconView.contentMode, .center) XCTAssertNil(iconView.preferredSymbolConfiguration) } } private func findImageView(in view: UIView, identifier: String) -> UIImageView? { if let imageView = view as? UIImageView, imageView.accessibilityIdentifier == identifier { return imageView } return view.subviews.lazy.compactMap { self.findImageView(in: $0, identifier: identifier) }.first } }