diff --git a/lib/svg/sanitizer.accessibility.test.ts b/lib/svg/sanitizer.accessibility.test.ts new file mode 100644 index 000000000..e477d03a7 --- /dev/null +++ b/lib/svg/sanitizer.accessibility.test.ts @@ -0,0 +1,43 @@ +import { describe, expect, it } from 'vitest'; +import { + sanitizeHexColor, + sanitizeSpeed, + getLuminance, + escapeXML, + sanitizeGoogleFontUrl, +} from './sanitizer'; + +describe('sanitizer Accessibility Standards & Screen Reader Aria Compliance', () => { + it('provides safe fallback colors to ensure visual elements remain visible accessibly', () => { + expect(sanitizeHexColor('invalid', '000000')).toBe('000000'); + expect(sanitizeHexColor(undefined, '123456')).toBe('123456'); + expect(sanitizeHexColor('#abcdef', '000000')).toBe('abcdef'); + }); + + it('ensures animation speeds fall within visually accessible bounds to avoid flashing', () => { + expect(sanitizeSpeed('1s', '8s')).toBe('8s'); + expect(sanitizeSpeed('25s', '8s')).toBe('8s'); + expect(sanitizeSpeed('5s', '8s')).toBe('5s'); + }); + + it('calculates color luminance accurately for WCAG contrast ratio compliance', () => { + expect(getLuminance('ffffff')).toBeCloseTo(1, 1); + expect(getLuminance('000000')).toBeCloseTo(0, 1); + }); + + it('safely escapes characters to prevent breaking screen reader or aria-label markup', () => { + const maliciousLabel = 'Label with