import { describe, it, expect } from 'vitest'; import { render } from '@testing-library/react'; import React from 'react'; import { PxlKitLocaleProvider } from '../locale'; import { PixelSection, PixelDivider } from '../layout'; import { PixelAvatar } from '../data/PixelAvatar'; import { PixelModal } from '../overlays/PixelModal'; /* ═══════════════════════════════════════════════════════════════════════════════ PixelSection — locale-aware title uppercasing ═══════════════════════════════════════════════════════════════════════════════ */ describe('PixelSection with Turkish locale', () => { it('uppercases title using Turkish rules when wrapped in provider', () => { render(

content

, ); // "işlem detayları" in Turkish uppercase → "İŞLEM DETAYLARI" const heading = document.querySelector('h3'); expect(heading).not.toBeNull(); expect(heading!.textContent).toContain('İ'); // dotted İ, not dotless I }); it('uppercases title using English rules without provider', () => { render(

content

, ); const heading = document.querySelector('h3'); expect(heading).not.toBeNull(); expect(heading!.textContent).toBe('ISTANBUL'); }); it('uppercases title using English rules when locale is en', () => { render(

content

, ); const heading = document.querySelector('h3'); expect(heading!.textContent).toBe('ISTANBUL'); }); }); /* ═══════════════════════════════════════════════════════════════════════════════ PixelAvatar — locale-aware initials ═══════════════════════════════════════════════════════════════════════════════ */ describe('PixelAvatar with Turkish locale', () => { it('generates correct initials for Turkish names', () => { render( , ); // "işıl gündüz" → initials "i" + "g" → Turkish uppercase → "İG" const avatar = document.querySelector('[title="işıl gündüz"]'); expect(avatar).not.toBeNull(); expect(avatar!.textContent).toBe('İG'); }); it('generates correct initials for English names', () => { render( , ); const avatar = document.querySelector('[title="John Doe"]'); expect(avatar!.textContent).toBe('JD'); }); }); /* ═══════════════════════════════════════════════════════════════════════════════ PixelModal — locale-aware title uppercasing ═══════════════════════════════════════════════════════════════════════════════ */ describe('PixelModal with Turkish locale', () => { it('uppercases modal title using Turkish rules', () => { render( {}}>

Modal content

, ); const heading = document.querySelector('h4'); expect(heading).not.toBeNull(); expect(heading!.textContent).toContain('İ'); // dotted İ }); it('does not render when closed', () => { render( {}}>

Hidden

, ); const heading = document.querySelector('h4'); expect(heading).toBeNull(); }); }); /* ═══════════════════════════════════════════════════════════════════════════════ CSS lang attribute — ensures provider sets lang for CSS text-transform ═══════════════════════════════════════════════════════════════════════════════ */ /* ═══════════════════════════════════════════════════════════════════════════════ PixelDivider — CSS class "uppercase" under lang attr ═══════════════════════════════════════════════════════════════════════════════ */ describe('PixelDivider with Turkish locale', () => { it('renders label text inside a span with CSS uppercase class', () => { const { container } = render( , ); const span = container.querySelector('span'); expect(span).not.toBeNull(); // The span should have the CSS 'uppercase' class (Tailwind) expect(span!.className).toContain('uppercase'); // Pixel surface wraps the label with ◆ ornaments — assert the raw label // is contained rather than checking strict equality. expect(span!.textContent).toContain('bilgi'); }); it('inherits lang="tr" from the provider wrapper div', () => { const { container } = render( , ); // The wrapper div with lang="tr" should contain the divider const langDiv = container.querySelector('div[lang="tr"]'); expect(langDiv).not.toBeNull(); const span = langDiv!.querySelector('span'); expect(span).not.toBeNull(); // Pixel surface decorates the label with ◆ ornaments — contain, not equal. expect(span!.textContent).toContain('işlem'); }); it('renders without label (just an hr)', () => { const { container } = render( , ); const hr = container.querySelector('hr'); expect(hr).not.toBeNull(); // No span should be rendered when label is undefined const span = container.querySelector('span'); expect(span).toBeNull(); }); }); /* ═══════════════════════════════════════════════════════════════════════════════ PixelSection — additional Turkish edge cases ═══════════════════════════════════════════════════════════════════════════════ */ describe('PixelSection — full Turkish title verification', () => { it('uppercases "istanbul şehir bilgileri" correctly', () => { render(

content

, ); const heading = document.querySelector('h3'); expect(heading!.textContent).toBe('İSTANBUL ŞEHİR BİLGİLERİ'); }); it('renders subtitle unchanged (not uppercased)', () => { render(

content

, ); const subtitle = document.querySelector('p.mt-2'); expect(subtitle).not.toBeNull(); expect(subtitle!.textContent).toBe('bu bir alt başlık'); }); }); /* ═══════════════════════════════════════════════════════════════════════════════ PixelAvatar — edge cases ═══════════════════════════════════════════════════════════════════════════════ */ describe('PixelAvatar — edge cases', () => { it('handles single word Turkish name', () => { render( , ); const avatar = document.querySelector('[title="ilker"]'); expect(avatar).not.toBeNull(); // "ilker" → initial "i" → Turkish uppercase → "İ" expect(avatar!.textContent).toBe('İ'); }); it('handles three-word Turkish name (takes first two initials)', () => { render( , ); const avatar = document.querySelector('[title="ibrahim kemal ilhan"]'); expect(avatar).not.toBeNull(); // "ibrahim kemal ilhan" → "i" + "k" + "i" → slice(0,2) → "ik" → Turkish uppercase → "İK" expect(avatar!.textContent).toBe('İK'); }); it('handles name starting with dotless ı', () => { render( , ); const avatar = document.querySelector('[title="ışık deniz"]'); expect(avatar).not.toBeNull(); // "ışık deniz" → "ı" + "d" → Turkish uppercase → "ID" expect(avatar!.textContent).toBe('ID'); }); }); /* ═══════════════════════════════════════════════════════════════════════════════ PixelModal — full title verification ═══════════════════════════════════════════════════════════════════════════════ */ describe('PixelModal — full Turkish title verification', () => { it('uppercases "silme işlemi" correctly', () => { render( {}}>

content

, ); const heading = document.querySelector('h4'); expect(heading!.textContent).toBe('SİLME İŞLEMİ'); }); }); /* Nested-provider and lang-attribute coverage moved to __tests__/overlay-foundation/PxlKitLocaleProvider.test.tsx (mirrored per-component test layout). This file keeps locale-aware COMPONENT integration tests only. */