@@ -53,9 +53,11 @@ final class UIColorWCAGTests: XCTestCase {
5353 XCTAssert (
5454 color1. isSufficientContrast ( to: color2, context: $0. context, level: . AA) ,
5555 String (
56- format: " #%@ vs #%@ ratio = %.02f under %@ Mode%@ " ,
56+ format: " #%@ %.2f vs #%@ %.2f ratio = %.02f under %@ Mode%@ " ,
5757 color1. rgbDisplayString ( prefix: " # " ) ,
58+ color1. rgbaComponents. alpha,
5859 color2. rgbDisplayString ( prefix: " # " ) ,
60+ color2. rgbaComponents. alpha,
5961 color1. contrastRatio ( to: color2) ,
6062 traits. userInterfaceStyle == . dark ? " Dark " : " Light " ,
6163 traits. accessibilityContrast == . high ? " Increased Contrast " : " "
@@ -135,6 +137,48 @@ final class UIColorWCAGTests: XCTestCase {
135137 XCTAssertEqual ( UIColor . black. contrastRatio ( to: . white) , 21.0 )
136138 }
137139
140+ func test_contrastRatio_deliversRatioForOneTransparentColor( ) {
141+ let color = UIColor ( rgb: 0x1B0B99 )
142+ let color75 = color. withAlphaComponent ( 0.75 )
143+ let color50 = color. withAlphaComponent ( 0.50 )
144+ let color25 = color. withAlphaComponent ( 0.25 )
145+ let white = UIColor . white
146+ let black = UIColor . black
147+
148+ // contrast against white
149+ contrastRatiosEqual ( ratio1: color. contrastRatio ( to: white) , ratio2: 13.51 )
150+ contrastRatiosEqual ( ratio1: color75. contrastRatio ( to: white) , ratio2: 7.12 )
151+ contrastRatiosEqual ( ratio1: white. contrastRatio ( to: color75) , ratio2: 7.12 )
152+ contrastRatiosEqual ( ratio1: color50. contrastRatio ( to: white) , ratio2: 3.30 )
153+ contrastRatiosEqual ( ratio1: white. contrastRatio ( to: color50) , ratio2: 3.30 )
154+ contrastRatiosEqual ( ratio1: color25. contrastRatio ( to: white) , ratio2: 1.71 )
155+ contrastRatiosEqual ( ratio1: white. contrastRatio ( to: color25) , ratio2: 1.71 )
156+
157+ // contrast against black
158+ contrastRatiosEqual ( ratio1: color. contrastRatio ( to: black) , ratio2: 1.55 )
159+ contrastRatiosEqual ( ratio1: color75. contrastRatio ( to: black) , ratio2: 1.31 )
160+ contrastRatiosEqual ( ratio1: black. contrastRatio ( to: color75) , ratio2: 1.31 )
161+ contrastRatiosEqual ( ratio1: color50. contrastRatio ( to: black) , ratio2: 1.15 )
162+ contrastRatiosEqual ( ratio1: black. contrastRatio ( to: color50) , ratio2: 1.15 )
163+ contrastRatiosEqual ( ratio1: color25. contrastRatio ( to: black) , ratio2: 1.05 )
164+ contrastRatiosEqual ( ratio1: black. contrastRatio ( to: color25) , ratio2: 1.05 )
165+ }
166+
167+ func test_contrastRatio_deliversNanForTwoTransparentColors( ) {
168+ let color = UIColor ( rgb: 0x1B0B99 )
169+ let color75 = color. withAlphaComponent ( 0.75 )
170+ let color50 = color. withAlphaComponent ( 0.50 )
171+
172+ XCTAssertLessThan ( color75. rgbaComponents. alpha, 1.0 )
173+ XCTAssertLessThan ( color50. rgbaComponents. alpha, 1.0 )
174+ XCTAssertTrue ( color75. contrastRatio ( to: color50) . isNaN)
175+ YCoreUI . isLoggingEnabled = false
176+ XCTAssertTrue ( color50. contrastRatio ( to: color75) . isNaN)
177+ XCTAssertFalse ( color50. isSufficientContrast ( to: color75) )
178+ XCTAssertFalse ( color75. isSufficientContrast ( to: color50) )
179+ YCoreUI . isLoggingEnabled = true
180+ }
181+
138182 private func contrastRatiosEqual( ratio1: CGFloat , ratio2: CGFloat ) {
139183 XCTAssertEqual ( round ( ratio1 * 100 ) / 100 , round ( ratio2 * 100 ) / 100 )
140184 }
0 commit comments