100 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Swift
		
	
	
	
		
		
			
		
	
	
			100 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Swift
		
	
	
	
|  | // | |||
|  | Tests.swift | |||
|  | Tests | |||
|  | // | |||
|  | //  Created by Leon on 2025/7/11. | |||
|  | // | |||
|  | 
 | |||
|  | import XCTest | |||
|  | @testable import Visual_Novel_iOS | |||
|  | 
 | |||
|  | class CLSystemTokenTests: XCTestCase { | |||
|  |      | |||
|  |     override func setUp() { | |||
|  |         super.setUp() | |||
|  |          | |||
|  |     } | |||
|  |      | |||
|  |     override func tearDown() { | |||
|  |         super.tearDown() | |||
|  |          | |||
|  |     } | |||
|  | 
 | |||
|  |     // 测试有效颜色的获取 | |||
|  |     func testColorForValidToken() { | |||
|  |         let expectedColor = UIColor(red: 1.0, green: 0.925, blue: 0.871, alpha: 1.0) // #FFECDE | |||
|  |         let color = CLSystemToken.color(token: .cph) | |||
|  |          | |||
|  |         XCTAssertNotNil(color, "Color should not be nil for valid token") | |||
|  |          | |||
|  | //        if let color = color { | |||
|  | //            XCTAssertEqual(color, expectedColor, accuracy: 0.01, "Color should match expected RGB values") | |||
|  | //        } | |||
|  |     } | |||
|  | 
 | |||
|  |     // 测试带透明度的颜色获取 | |||
|  |     func testColorWithAlpha() { | |||
|  |         // 假设 skin.json 中有一个键返回 ["#FFECDE", "0.5"] | |||
|  |         let token = CLEnumSystemToken(rawValue: "color.orange.with.alpha") | |||
|  |         let expectedColor = UIColor(red: 1.0, green: 0.925, blue: 0.871, alpha: 0.5) | |||
|  |          | |||
|  |         // 模拟 EPUI 返回带透明度的值 | |||
|  |         let mockValues = ["#FFECDE", "0.5"] | |||
|  |         // 假设 EPUI.getTokensByKey 返回 mockValues(需要 mock 或修改 skin.json) | |||
|  |         let color = EPBaseObject.subGetColorByTokenValues(mockValues) | |||
|  |          | |||
|  |         XCTAssertNotNil(color, "Color with alpha should not be nil") | |||
|  |          | |||
|  |         if let color = color { | |||
|  |              | |||
|  |             //XCTAssertEqual(color, expectedColor, accuracy: 0.01, "Color with alpha should match expected RGBA values") | |||
|  |             //XCTAssertEqual(color, expectedColor, accuracy: 0.01, "xxx") | |||
|  |         } | |||
|  |     } | |||
|  | 
 | |||
|  |     // 测试无效 token | |||
|  | //    func testColorForInvalidToken() { | |||
|  | //        let token = CLEnumSystemToken(rawValue: "invalid.color")! | |||
|  | //        let color = CLSystemToken.color(token: token) | |||
|  | //         | |||
|  | //        XCTAssertNil(color, "Color should be nil for invalid token") | |||
|  | //    } | |||
|  | 
 | |||
|  |     // 测试深色模式颜色获取 | |||
|  | //    func testDarkColorForValidToken() { | |||
|  | //        let token = CLEnumSystemToken(rawValue: "color.orange.90")! // 深色模式示例 | |||
|  | //        let expectedColor = UIColor(red: 0.302, green: 0.078, blue: 0.0, alpha: 1.0) // #4D1400 | |||
|  | //        let color = CLSystemToken.darkColor(token: token) | |||
|  | //         | |||
|  | //        XCTAssertNotNil(color, "Dark color should not be nil for valid token") | |||
|  | //         | |||
|  | ////        if let color = color { | |||
|  | ////            XCTAssertEqual(color, expectedColor, accuracy: 0.01, "Dark color should match expected RGB values") | |||
|  | ////        } | |||
|  | //    } | |||
|  | 
 | |||
|  |     // 测试空值情况 | |||
|  | //    func testColorForEmptyValues() { | |||
|  | //        let emptyValues: [String] = [] | |||
|  | //        let color = EPBaseObject.subGetColorByTokenValues(emptyValues) | |||
|  | //         | |||
|  | //        XCTAssertNil(color, "Color should be nil for empty values") | |||
|  | //    } | |||
|  | } | |||
|  | 
 | |||
|  | // 扩展 UIColor 以支持比较 | |||
|  | extension UIColor { | |||
|  |     func isEqual(to color: UIColor, accuracy: CGFloat) -> Bool { | |||
|  |         var r1: CGFloat = 0, g1: CGFloat = 0, b1: CGFloat = 0, a1: CGFloat = 0 | |||
|  |         var r2: CGFloat = 0, g2: CGFloat = 0, b2: CGFloat = 0, a2: CGFloat = 0 | |||
|  |          | |||
|  |         self.getRed(&r1, green: &g1, blue: &b1, alpha: &a1) | |||
|  |         color.getRed(&r2, green: &g2, blue: &b2, alpha: &a2) | |||
|  |          | |||
|  |         return abs(r1 - r2) <= accuracy && | |||
|  |                abs(g1 - g2) <= accuracy && | |||
|  |                abs(b1 - b2) <= accuracy && | |||
|  |                abs(a1 - a2) <= accuracy | |||
|  |     } | |||
|  | } |