-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathutils.test.ts
More file actions
51 lines (43 loc) · 2.06 KB
/
utils.test.ts
File metadata and controls
51 lines (43 loc) · 2.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import { getContrastText } from './utils';
const LIGHT_TEXT = '#EAEAEA';
const DARK_TEXT = '#000000';
describe('getContrastText', () => {
it('returns light text on dark backgrounds', () => {
expect(getContrastText('#000000', LIGHT_TEXT, DARK_TEXT)).toBe(LIGHT_TEXT);
expect(getContrastText('#1A1A1A', LIGHT_TEXT, DARK_TEXT)).toBe(LIGHT_TEXT);
expect(getContrastText('#121219', LIGHT_TEXT, DARK_TEXT)).toBe(LIGHT_TEXT);
expect(getContrastText('#2F4185', LIGHT_TEXT, DARK_TEXT)).toBe(LIGHT_TEXT);
});
it('returns dark text on light backgrounds', () => {
expect(getContrastText('#FFFFFF', LIGHT_TEXT, DARK_TEXT)).toBe(DARK_TEXT);
expect(getContrastText('#F5F5F5', LIGHT_TEXT, DARK_TEXT)).toBe(DARK_TEXT);
expect(getContrastText('#FCFCFC', LIGHT_TEXT, DARK_TEXT)).toBe(DARK_TEXT);
});
it('returns light text on saturated colors where WCAG luminance is ambiguous', () => {
expect(getContrastText('#E60028', LIGHT_TEXT, DARK_TEXT)).toBe(LIGHT_TEXT);
expect(getContrastText('#E9041E', LIGHT_TEXT, DARK_TEXT)).toBe(LIGHT_TEXT);
expect(getContrastText('#E60028', '#0D0D0D', '#EAEAEA')).toBe('#EAEAEA');
});
it('works regardless of which token is lighter', () => {
expect(getContrastText('#000000', DARK_TEXT, LIGHT_TEXT)).toBe(LIGHT_TEXT);
expect(getContrastText('#FFFFFF', DARK_TEXT, LIGHT_TEXT)).toBe(DARK_TEXT);
});
it('handles 3-character hex shorthand', () => {
expect(getContrastText('#FFF', LIGHT_TEXT, DARK_TEXT)).toBe(DARK_TEXT);
expect(getContrastText('#000', LIGHT_TEXT, DARK_TEXT)).toBe(LIGHT_TEXT);
});
it('handles rgb color format', () => {
expect(getContrastText('rgb(0, 0, 0)', LIGHT_TEXT, DARK_TEXT)).toBe(LIGHT_TEXT);
expect(getContrastText('rgb(255, 255, 255)', LIGHT_TEXT, DARK_TEXT)).toBe(DARK_TEXT);
});
it('returns null for unparseable values', () => {
expect(
getContrastText(
'linear-gradient(130deg, #9355E7 0%, #2E4AA3 60%)',
LIGHT_TEXT,
DARK_TEXT,
),
).toBeNull();
expect(getContrastText('not-a-color', LIGHT_TEXT, DARK_TEXT)).toBeNull();
});
});