@birhaus/test-utils
Version:
BIRHAUS v3.0 Radical Minimalist Testing Framework - Glass morphism validators, generous spacing tests, and v3 component validation utilities
101 lines (99 loc) • 3.08 kB
text/typescript
/**
* BIRHAUS Accessibility Validator
*
* Comprehensive accessibility testing utilities implementing BIRHAUS Principle #6:
* "Accessibility = dignity"
*
* Features:
* - WCAG AA+ compliance validation
* - Spanish-first accessibility testing
* - Color contrast analysis
* - Keyboard navigation testing
* - Screen reader compatibility
* - Focus management validation
*/
interface AccessibilityViolation {
type: 'contrast' | 'keyboard' | 'aria' | 'structure' | 'focus' | 'spanish';
element: Element;
severity: 'minor' | 'moderate' | 'serious' | 'critical';
message: string;
messageEs: string;
wcagLevel: 'A' | 'AA' | 'AAA';
wcagCriterion: string;
suggestions: string[];
birhausPrinciple: number;
}
interface AccessibilityTestOptions {
level?: 'A' | 'AA' | 'AAA';
includeColorContrast?: boolean;
includeKeyboardNav?: boolean;
includeFocusManagement?: boolean;
includeAriaLabels?: boolean;
includeSpanishLabels?: boolean;
customRules?: {
[key: string]: any;
};
interactiveElements?: string;
spanishElements?: string;
}
declare class AccessibilityValidator {
private options;
constructor(options?: AccessibilityTestOptions);
/**
* Run comprehensive accessibility validation
*/
validateAll(container?: HTMLElement): Promise<AccessibilityViolation[]>;
/**
* Validate using axe-core accessibility engine
*/
private validateWithAxe;
/**
* Validate color contrast ratios (WCAG AA+ requirement)
*/
private validateColorContrast;
/**
* Validate keyboard navigation (WCAG requirement)
*/
validateKeyboardNavigation(container: HTMLElement): Promise<AccessibilityViolation[]>;
/**
* Validate focus management
*/
private validateFocusManagement;
/**
* Validate ARIA labels and roles
*/
private validateAriaLabels;
/**
* Validate Spanish-first accessibility (BIRHAUS Principle #7)
*/
private validateSpanishLabels;
private getViolationType;
private getWcagLevel;
private translateViolation;
private hasText;
private calculateContrastRatio;
private parseColor;
private getRelativeLuminance;
private getRequiredContrast;
private isFocusable;
private hasFocusIndicator;
private getFocusableElements;
private hasAccessibleName;
private hasSpanishAccessibilityLabel;
}
/**
* Test helper functions for accessibility assertions
*/
/**
* Assert WCAG AA+ compliance
*/
declare function expectAccessibilityCompliance(container?: HTMLElement, level?: 'A' | 'AA' | 'AAA'): Promise<void>;
/**
* Assert Spanish-first accessibility
*/
declare function expectSpanishAccessibility(container?: HTMLElement): Promise<void>;
/**
* Assert keyboard navigation works
*/
declare function expectKeyboardAccessible(container?: HTMLElement): Promise<void>;
export { type AccessibilityTestOptions, AccessibilityValidator, type AccessibilityViolation, expectAccessibilityCompliance, expectKeyboardAccessible, expectSpanishAccessibility };