import React from 'react';
import { describe, it, expect } from 'vitest';
import { render } from '@testing-library/react';
import { PixelDivider } from '../../layout/PixelDivider';
describe('PixelDivider — without label', () => {
it('renders a bare
with the pixel dotted rule by default', () => {
const { container } = render();
const hr = container.querySelector('hr');
expect(hr).not.toBeNull();
expect(hr!.className).toContain('border-t-2');
expect(hr!.className).toContain('border-dotted');
expect(container.querySelector('[role="separator"]')).toBeNull();
});
it('surface="linear" uses a thin solid rule', () => {
const { container } = render();
const hr = container.querySelector('hr')!;
expect(hr.className).toContain('border-t');
expect(hr.className).not.toContain('border-dotted');
});
});
describe('PixelDivider — with label', () => {
it('renders role="separator" with aria-orientation + aria-label', () => {
const { getByRole } = render();
const sep = getByRole('separator');
expect(sep.getAttribute('aria-orientation')).toBe('horizontal');
expect(sep.getAttribute('aria-label')).toBe('Section');
expect(sep.textContent).toContain('Section');
});
it('flanks the label with two aria-hidden rules', () => {
const { container } = render();
const hrs = container.querySelectorAll('hr[aria-hidden="true"]');
expect(hrs.length).toBe(2);
});
it('pixel surface decorates the label with diamond ornaments', () => {
const { getByRole } = render();
const ornaments = Array.from(getByRole('separator').querySelectorAll('span'))
.filter((s) => s.textContent === '◆');
expect(ornaments.length).toBe(2);
});
it('linear surface drops the diamond ornaments', () => {
const { getByRole } = render(
,
);
expect(getByRole('separator').textContent).not.toContain('◆');
});
it('tone tints the label text', () => {
const { getByRole } = render();
const labelSpan = getByRole('separator').querySelector('span') as HTMLElement;
expect(labelSpan.className).toContain('text-retro-cyan');
});
});
describe('PixelDivider — spacing', () => {
it('spacing="md" applies py-6, default applies none', () => {
const { container, rerender } = render();
expect(container.querySelector('hr')!.className).toContain('py-6');
rerender();
expect(container.querySelector('hr')!.className).not.toContain('py-6');
});
it('spacing="lg" applies py-10 on the labeled variant', () => {
const { getByRole } = render();
expect(getByRole('separator').className).toContain('py-10');
});
});