|
1 | 1 | import { describe, expect, it } from 'vitest' |
2 | | -import { perceivedBrightness } from './color' |
| 2 | +import { perceivedBackgroundBrightness, perceivedBrightness } from './color' |
3 | 3 |
|
4 | 4 | describe('perceivedBrightness', () => { |
5 | 5 | it('returns 1 for white and 0 for black (hex and keywords)', () => { |
@@ -27,3 +27,27 @@ describe('perceivedBrightness', () => { |
27 | 27 | expect((perceivedBrightness('#3B82F6') as number) < 0.6).toBe(true) |
28 | 28 | }) |
29 | 29 | }) |
| 30 | + |
| 31 | +describe('perceivedBackgroundBrightness', () => { |
| 32 | + it('preserves solid-color brightness', () => { |
| 33 | + expect(perceivedBackgroundBrightness('#ffffff')).toBe(1) |
| 34 | + expect(perceivedBackgroundBrightness('#000000')).toBe(0) |
| 35 | + }) |
| 36 | + |
| 37 | + it('averages supported CSS gradient stops', () => { |
| 38 | + expect( |
| 39 | + perceivedBackgroundBrightness('linear-gradient(180deg, #E0F7FA 0%, #FFFFFF 100%)') |
| 40 | + ).toBeCloseTo(0.9715) |
| 41 | + expect(perceivedBackgroundBrightness('linear-gradient(45deg, #000, #fff)')).toBe(0.5) |
| 42 | + expect( |
| 43 | + perceivedBackgroundBrightness('radial-gradient(circle, black, #fff, white)') |
| 44 | + ).toBeCloseTo(2 / 3) |
| 45 | + }) |
| 46 | + |
| 47 | + it('returns null for unsupported backgrounds', () => { |
| 48 | + expect( |
| 49 | + perceivedBackgroundBrightness('linear-gradient(45deg, currentColor, transparent)') |
| 50 | + ).toBeNull() |
| 51 | + expect(perceivedBackgroundBrightness('currentColor')).toBeNull() |
| 52 | + }) |
| 53 | +}) |
0 commit comments