Files
suixinkan_uikit/suixinkanTests/ProfileAvatarCropTests.swift
汉秋 005349f8e6 模块化 AppStore 并完善素材管理与个人空间设置。
将会话、权限、位置、收款与排队存储拆分为独立模块,同步更新各 ViewModel 与单元测试,并补充素材管理 UI 与个人空间设置交互。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-13 11:01:08 +08:00

48 lines
1.9 KiB
Swift

//
// ProfileAvatarCropTests.swift
// suixinkanTests
//
import XCTest
@testable import suixinkan
@MainActor
///
final class ProfileAvatarCropTests: XCTestCase {
func testCropOutputIs480PixelSquare() throws {
let source = UIGraphicsImageRenderer(size: CGSize(width: 800, height: 600)).image { context in
UIColor.red.setFill()
context.fill(CGRect(x: 0, y: 0, width: 800, height: 600))
}
let controller = ProfileAvatarCropViewController(image: source) { _ in }
controller.loadViewIfNeeded()
controller.view.frame = CGRect(x: 0, y: 0, width: 390, height: 844)
controller.view.setNeedsLayout()
controller.view.layoutIfNeeded()
let data = try XCTUnwrap(controller.renderedCropData())
let image = try XCTUnwrap(UIImage(data: data))
XCTAssertEqual(image.size.width * image.scale, 480)
XCTAssertEqual(image.size.height * image.scale, 480)
}
func testCropNormalizesImageOrientation() throws {
let base = UIGraphicsImageRenderer(size: CGSize(width: 600, height: 800)).image { context in
UIColor.blue.setFill()
context.fill(CGRect(x: 0, y: 0, width: 600, height: 800))
}
let cgImage = try XCTUnwrap(base.cgImage)
let rotated = UIImage(cgImage: cgImage, scale: 1, orientation: .left)
let controller = ProfileAvatarCropViewController(image: rotated) { _ in }
controller.loadViewIfNeeded()
controller.view.frame = CGRect(x: 0, y: 0, width: 390, height: 844)
controller.view.layoutIfNeeded()
let data = try XCTUnwrap(controller.renderedCropData())
let output = try XCTUnwrap(UIImage(data: data))
XCTAssertEqual(output.imageOrientation, .up)
XCTAssertEqual(output.size.width * output.scale, 480)
XCTAssertEqual(output.size.height * output.scale, 480)
}
}