97 lines
3.5 KiB
Swift
97 lines
3.5 KiB
Swift
//
|
|
// 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 testSystemSymbolsPreserveSymbolRepresentation() {
|
|
let iconNames = [
|
|
"ellipsis",
|
|
"dot.radiowaves.left.and.right",
|
|
"rectangle.stack.badge.plus",
|
|
"mappin.circle.fill",
|
|
]
|
|
|
|
for iconName in iconNames {
|
|
let image = HomeMenuIconFactory.image(named: iconName)
|
|
|
|
XCTAssertNotNil(image)
|
|
XCTAssertTrue(image?.isSymbolImage ?? false)
|
|
XCTAssertNotNil(image?.symbolConfiguration)
|
|
}
|
|
}
|
|
|
|
func testComplexSystemSymbolResolves() {
|
|
XCTAssertNotNil(HomeMenuIconFactory.image(named: "dot.radiowaves.left.and.right"))
|
|
XCTAssertNotNil(HomeMenuIconFactory.image(named: "rectangle.stack.badge.plus"))
|
|
}
|
|
|
|
func testLocationReportIconKeepsSystemSymbolLayers() {
|
|
let image = HomeMenuIconFactory.image(named: "mappin.circle.fill")
|
|
|
|
XCTAssertNotNil(image)
|
|
XCTAssertTrue(image?.isSymbolImage ?? false)
|
|
}
|
|
}
|
|
|
|
/// 首页常用应用 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: "location", title: "位置上报", iconName: "mappin.circle.fill"),
|
|
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))
|
|
let alignmentSize = iconView.alignmentRect(forFrame: iconView.frame).size
|
|
XCTAssertEqual(alignmentSize.width, 24, accuracy: 0.001)
|
|
XCTAssertEqual(alignmentSize.height, 24, accuracy: 0.001)
|
|
XCTAssertEqual(iconView.superview?.bounds.size, CGSize(width: 40, height: 40))
|
|
XCTAssertEqual(iconView.contentMode, .center)
|
|
XCTAssertNil(iconView.preferredSymbolConfiguration)
|
|
|
|
if menu.iconName == "home_menu_space" {
|
|
XCTAssertEqual(iconView.image?.size, HomeMenuIconFactory.canvasSize)
|
|
XCTAssertFalse(iconView.image?.isSymbolImage ?? true)
|
|
} else {
|
|
XCTAssertTrue(iconView.image?.isSymbolImage ?? false)
|
|
}
|
|
}
|
|
}
|
|
|
|
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
|
|
}
|
|
}
|