fix: 固定首页常用应用图标尺寸
This commit is contained in:
@ -14,27 +14,25 @@ final class HomeMenuIconFactoryTests: XCTestCase {
|
||||
let image = HomeMenuIconFactory.image(named: "home_menu_space")
|
||||
|
||||
XCTAssertNotNil(image)
|
||||
XCTAssertEqual(image?.size, HomeMenuIconFactory.canvasSize)
|
||||
XCTAssertNil(UIImage(systemName: "home_menu_space"))
|
||||
}
|
||||
|
||||
func testSystemSymbolMatchesSharedConfiguration() {
|
||||
let expected = UIImage(
|
||||
systemName: "ellipsis",
|
||||
withConfiguration: HomeMenuIconFactory.symbolConfiguration
|
||||
)
|
||||
let actual = HomeMenuIconFactory.image(named: "ellipsis")
|
||||
func testSystemSymbolsUseFixedCanvas() {
|
||||
let iconNames = [
|
||||
"ellipsis",
|
||||
"dot.radiowaves.left.and.right",
|
||||
"rectangle.stack.badge.plus",
|
||||
]
|
||||
|
||||
XCTAssertNotNil(actual)
|
||||
XCTAssertEqual(actual?.size, expected?.size)
|
||||
}
|
||||
for iconName in iconNames {
|
||||
let image = HomeMenuIconFactory.image(named: iconName)
|
||||
|
||||
func testSystemSymbolDiffersFromUnconfiguredDefault() {
|
||||
let configured = HomeMenuIconFactory.image(named: "ellipsis")
|
||||
let plain = UIImage(systemName: "ellipsis")
|
||||
|
||||
XCTAssertNotNil(configured)
|
||||
XCTAssertNotNil(plain)
|
||||
XCTAssertNotEqual(configured?.size, plain?.size)
|
||||
XCTAssertNotNil(image)
|
||||
XCTAssertEqual(image?.size, HomeMenuIconFactory.canvasSize)
|
||||
XCTAssertEqual(image?.renderingMode, .alwaysTemplate)
|
||||
XCTAssertFalse(image?.isSymbolImage ?? true)
|
||||
}
|
||||
}
|
||||
|
||||
func testComplexSystemSymbolResolves() {
|
||||
@ -42,3 +40,41 @@ final class HomeMenuIconFactoryTests: XCTestCase {
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user