/** * List Layout Tests * Prevents regression of list structure and item alignment */ import { describe, it, expect, beforeEach, afterEach } from 'vitest'; import '../list/index.ts'; import type { USAList } from './usa-list.js'; import { validateComponentJavaScript } from '../../../__tests__/test-utils.js'; describe('USAList Layout Tests', () => { let element: USAList; beforeEach(() => { element = document.createElement('usa-list') as USAList; element.innerHTML = `
  • Item 1
  • Item 2
  • Item 3
  • `; document.body.appendChild(element); }); afterEach(() => { element.remove(); }); it('should have correct USWDS list structure', async () => { await element.updateComplete; const list = element.querySelector('.usa-list'); const listItems = element.querySelectorAll('li'); expect(list, 'List should exist').toBeTruthy(); expect(listItems.length, 'Should have list items').toBe(3); listItems.forEach((item) => { expect(list?.contains(item)).toBe(true); }); }); it('should handle unstyled variant correctly', async () => { element.unstyled = true; await element.updateComplete; const list = element.querySelector('.usa-list'); expect(list?.classList.contains('usa-list--unstyled')).toBe(true); describe('JavaScript Implementation Validation', () => { it('should pass JavaScript implementation validation', async () => { // Validate USWDS JavaScript implementation patterns const componentPath = `${process.cwd()}/src/components/list/usa-list.ts`; const validation = validateComponentJavaScript(componentPath, 'list'); if (!validation.isValid) { console.warn('JavaScript validation issues:', validation.issues); } // JavaScript validation should pass for critical integration patterns expect(validation.score).toBeGreaterThan(50); // Allow some non-critical issues // Critical USWDS integration should be present const criticalIssues = validation.issues.filter(issue => issue.includes('Missing USWDS JavaScript integration') ); expect(criticalIssues.length).toBe(0); }); }); }); describe('Visual Regression Prevention', () => { it('should maintain list structure integrity', async () => { await element.updateComplete; const list = element.querySelector('.usa-list'); expect(list?.classList.contains('usa-list')).toBe(true); }); }); });