Files
CherryHQ-cherry-studio/packages/ui/scripts/__tests__/build-theme-css.test.ts
2026-06-17 13:26:53 +08:00

38 lines
2.0 KiB
TypeScript

import path from 'node:path'
import { describe, expect, it } from 'vitest'
import { buildThemeContractCss, loadThemeContractInputs } from '../build-theme-css'
describe('buildThemeContractCss', () => {
it('maps token sources into the public theme contract', async () => {
const stylesDir = path.resolve(import.meta.dirname, '../../src/styles')
const css = buildThemeContractCss(await loadThemeContractInputs(stylesDir))
expect(css).toContain("@import './tokens.css';")
expect(css).toContain('/* Runtime Theme Inputs */')
expect(css).toContain('--cs-theme-primary: var(--cs-primary);')
expect(css).toContain('--cs-theme-ring: color-mix(in srgb, var(--cs-theme-primary) 40%, transparent);')
expect(css).not.toContain('--cs-user-font-family:')
expect(css).not.toContain('--cs-user-code-font-family:')
expect(css).toContain('/* Compatibility Aliases */')
expect(css).toContain('--primary: var(--color-primary);')
expect(css).toContain('--ring: var(--color-ring);')
expect(css).toContain('--color-neutral-50: var(--cs-neutral-50);')
expect(css).toContain('--color-brand-500: var(--cs-brand-500);')
expect(css).toContain('/* Semantic Colors */')
expect(css).toContain('--color-primary: var(--cs-theme-primary);')
expect(css).toContain('--color-ring: var(--cs-theme-ring);')
expect(css).not.toContain('--color-ring: var(--cs-ring);')
expect(css).toContain('--color-destructive: var(--cs-destructive);')
expect(css).toContain('--color-error-base: var(--cs-error-base);')
expect(css).toContain('--radius-md: var(--cs-radius-md);')
expect(css).toContain('--font-size-body-md: var(--cs-font-size-body-md);')
expect(css).toContain('--animate-checkbox-bounce: checkbox-bounce 300ms cubic-bezier(0.4, 0, 0.2, 1);')
expect(css).toContain('--animate-checkbox-icon-in: checkbox-icon-in 160ms ease-out both;')
expect(css).toContain('@keyframes checkbox-bounce {')
expect(css).toContain('@keyframes checkbox-icon-in {')
expect(css).not.toContain('.dark {')
})
})