import { render, screen } from '@testing-library/react'; import { describe, expect, it } from 'vitest'; import { Text } from './Text'; describe('Text', () => { it('renders default body variant as a

with body classes', () => { render(Hello world); const el = screen.getByText('Hello world'); expect(el.tagName.toLowerCase()).toBe('p'); expect(el).toHaveClass('text-sm'); expect(el).toHaveClass('leading-normal'); expect(el).toHaveAttribute('data-slot', 'text'); }); it('renders variant="h2" as an

', () => { render(Heading Two); const el = screen.getByText('Heading Two'); expect(el.tagName.toLowerCase()).toBe('h2'); expect(el).toHaveClass('text-2xl'); expect(el).toHaveClass('font-semibold'); }); it('renders variant="code" as a ', () => { render(npm install pickle-ui); const el = screen.getByText('npm install pickle-ui'); expect(el.tagName.toLowerCase()).toBe('code'); expect(el).toHaveClass('font-mono'); }); it('overrides the element via the as prop while keeping data-slot and variant classes', () => { render( Page title , ); const el = screen.getByText('Page title'); expect(el.tagName.toLowerCase()).toBe('h1'); expect(el).toHaveAttribute('data-slot', 'text'); expect(el).toHaveClass('text-2xl'); expect(el).toHaveClass('font-semibold'); }); it('merges className without replacing variant classes', () => { render(Merged classes); const el = screen.getByText('Merged classes'); expect(el).toHaveClass('text-sm'); expect(el).toHaveClass('custom-class'); }); it('tone="muted" adds text-muted-foreground and is orthogonal to variant', () => { render( Muted body , ); const muted = screen.getByText('Muted body'); expect(muted).toHaveClass('text-muted-foreground'); render( Muted heading , ); const mutedHeading = screen.getByText('Muted heading'); expect(mutedHeading).toHaveClass('text-muted-foreground'); expect(mutedHeading).toHaveClass('text-xl'); expect(mutedHeading.tagName.toLowerCase()).toBe('h3'); }); });