|
1 | 1 | import { expect, test } from 'vitest'
|
2 | 2 | import { replaceCssVarsWithFallbacks } from './css-vars'
|
| 3 | +import { State } from './state' |
| 4 | +import { DesignSystem } from './v4' |
3 | 5 |
|
4 | 6 | test('replacing CSS variables with their fallbacks (when they have them)', () => {
|
5 |
| - expect(replaceCssVarsWithFallbacks('var(--foo, red)')).toBe(' red') |
6 |
| - expect(replaceCssVarsWithFallbacks('var(--foo, )')).toBe(' ') |
| 7 | + let map = new Map<string, string>([ |
| 8 | + ['--known', 'blue'], |
| 9 | + ]) |
7 | 10 |
|
8 |
| - expect(replaceCssVarsWithFallbacks('rgb(var(--foo, 255 0 0))')).toBe('rgb( 255 0 0)') |
9 |
| - expect(replaceCssVarsWithFallbacks('rgb(var(--foo, var(--bar)))')).toBe('rgb( var(--bar))') |
| 11 | + let state: State = { |
| 12 | + enabled: true, |
| 13 | + designSystem: { |
| 14 | + resolveThemeValue: (name) => map.get(name) ?? null, |
| 15 | + } as DesignSystem, |
| 16 | + } |
| 17 | + |
| 18 | + expect(replaceCssVarsWithFallbacks(state, 'var(--foo, red)')).toBe(' red') |
| 19 | + expect(replaceCssVarsWithFallbacks(state, 'var(--foo, )')).toBe(' ') |
| 20 | + |
| 21 | + expect(replaceCssVarsWithFallbacks(state, 'rgb(var(--foo, 255 0 0))')).toBe('rgb( 255 0 0)') |
| 22 | + expect(replaceCssVarsWithFallbacks(state, 'rgb(var(--foo, var(--bar)))')).toBe('rgb( var(--bar))') |
10 | 23 |
|
11 | 24 | expect(
|
12 |
| - replaceCssVarsWithFallbacks('rgb(var(var(--bar, var(--baz), var(--qux), var(--thing))))'), |
| 25 | + replaceCssVarsWithFallbacks( |
| 26 | + state, |
| 27 | + 'rgb(var(var(--bar, var(--baz), var(--qux), var(--thing))))', |
| 28 | + ), |
13 | 29 | ).toBe('rgb(var(var(--bar, var(--baz), var(--qux), var(--thing))))')
|
14 | 30 |
|
15 | 31 | expect(
|
16 | 32 | replaceCssVarsWithFallbacks(
|
| 33 | + state, |
17 | 34 | 'rgb(var(--one, var(--bar, var(--baz), var(--qux), var(--thing))))',
|
18 | 35 | ),
|
19 | 36 | ).toBe('rgb( var(--baz), var(--qux), var(--thing))')
|
20 | 37 |
|
21 | 38 | expect(
|
22 | 39 | replaceCssVarsWithFallbacks(
|
| 40 | + state, |
23 | 41 | 'color-mix(in srgb, var(--color-primary, oklch(0 0 0 / 2.5)), var(--color-secondary, oklch(0 0 0 / 2.5)), 50%)',
|
24 | 42 | ),
|
25 | 43 | ).toBe('color-mix(in srgb, oklch(0 0 0 / 2.5), oklch(0 0 0 / 2.5), 50%)')
|
| 44 | + |
| 45 | + // Known theme keys are replaced with their values |
| 46 | + expect(replaceCssVarsWithFallbacks(state, 'var(--known)')).toBe('blue') |
| 47 | + |
| 48 | + // Values from the theme take precedence over fallbacks |
| 49 | + expect(replaceCssVarsWithFallbacks(state, 'var(--known, red)')).toBe('blue') |
| 50 | + |
| 51 | + // Unknown theme keys use a fallback if provided |
| 52 | + expect(replaceCssVarsWithFallbacks(state, 'var(--unknown, red)')).toBe(' red') |
| 53 | + |
| 54 | + // Unknown theme keys without fallbacks are not replaced |
| 55 | + expect(replaceCssVarsWithFallbacks(state, 'var(--unknown)')).toBe('var(--unknown)') |
26 | 56 | })
|
0 commit comments