51 lines
1.4 KiB
TypeScript
51 lines
1.4 KiB
TypeScript
import { describe, it, expect } from 'vitest'
|
|
import { cn } from '../utils'
|
|
|
|
describe('cn utility', () => {
|
|
it('should merge class names', () => {
|
|
const result = cn('class1', 'class2')
|
|
expect(result).toBe('class1 class2')
|
|
})
|
|
|
|
it('should handle conditional classes', () => {
|
|
const isConditional = true
|
|
const isHidden = false
|
|
const result = cn('base', isConditional && 'conditional', isHidden && 'hidden')
|
|
expect(result).toBe('base conditional')
|
|
})
|
|
|
|
it('should merge Tailwind classes correctly', () => {
|
|
const result = cn('px-2 py-1', 'px-4')
|
|
expect(result).toBe('py-1 px-4')
|
|
})
|
|
|
|
it('should handle arrays of classes', () => {
|
|
const result = cn(['class1', 'class2'], 'class3')
|
|
expect(result).toBe('class1 class2 class3')
|
|
})
|
|
|
|
it('should handle objects with boolean values', () => {
|
|
const result = cn({
|
|
'class1': true,
|
|
'class2': false,
|
|
'class3': true,
|
|
})
|
|
expect(result).toBe('class1 class3')
|
|
})
|
|
|
|
it('should handle undefined and null values', () => {
|
|
const result = cn('class1', undefined, null, 'class2')
|
|
expect(result).toBe('class1 class2')
|
|
})
|
|
|
|
it('should handle empty input', () => {
|
|
const result = cn()
|
|
expect(result).toBe('')
|
|
})
|
|
|
|
it('should merge conflicting Tailwind classes', () => {
|
|
const result = cn('text-red-500', 'text-blue-500')
|
|
expect(result).toBe('text-blue-500')
|
|
})
|
|
})
|