{"version":3,"sources":["../../src/testing/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * @fileoverview OrdoJS Accessibility - Testing Module\n *\n * Automated accessibility testing and auditing.\n */\n\nimport { EventEmitter } from 'events';\nimport type {\n    AccessibilityTestResult,\n    TestingConfig\n} from '../types/index.js';\n\n/**\n * Testing manager for handling automated accessibility testing\n */\nexport class TestingManager extends EventEmitter {\n  private config: TestingConfig;\n  private testResults: Map<string, AccessibilityTestResult>;\n  private isInitialized: boolean;\n\n  /**\n   * Create a new TestingManager instance\n   *\n   * @param config - Testing configuration\n   */\n  constructor(config: TestingConfig) {\n    super();\n\n    this.config = config;\n    this.testResults = new Map();\n    this.isInitialized = false;\n  }\n\n  /**\n   * Initialize the testing manager\n   */\n  async initialize(): Promise<void> {\n    if (this.isInitialized) {\n      console.warn('Testing manager is already initialized');\n      return;\n    }\n\n    try {\n      // Initialize testing framework\n      await this.initializeTestingFramework();\n\n      this.isInitialized = true;\n      console.log('Testing manager initialized successfully');\n\n      this.emit('initialized');\n    } catch (error) {\n      console.error('Failed to initialize testing manager:', error);\n      this.emit('error', error);\n      throw error;\n    }\n  }\n\n  /**\n   * Run accessibility tests\n   *\n   * @param url - URL to test\n   * @param options - Test options\n   * @returns Test results\n   */\n  async runTests(\n    url: string,\n    options: {\n      rules?: string[];\n      ignoreRules?: string[];\n      timeout?: number;\n      retries?: number;\n    } = {}\n  ): Promise<AccessibilityTestResult[]> {\n    if (!this.isInitialized) {\n      throw new Error('Testing manager not initialized');\n    }\n\n    const results: AccessibilityTestResult[] = [];\n    const rules = options.rules || this.config.rules;\n    const ignoreRules = options.ignoreRules || this.config.ignoreRules;\n    const timeout = options.timeout || this.config.timeout;\n    const retries = options.retries || this.config.retries;\n\n    try {\n      console.log(`Running accessibility tests for ${url}...`);\n\n      // Run tests based on framework\n      switch (this.config.framework) {\n        case 'axe-core':\n          results.push(...await this.runAxeCoreTests(url, rules, ignoreRules, timeout));\n          break;\n        case 'puppeteer':\n          results.push(...await this.runPuppeteerTests(url, rules, ignoreRules, timeout));\n          break;\n        case 'jsdom':\n          results.push(...await this.runJSDOMTests(url, rules, ignoreRules, timeout));\n          break;\n        default:\n          throw new Error(`Unsupported testing framework: ${this.config.framework}`);\n      }\n\n      // Store results\n      for (const result of results) {\n        this.testResults.set(result.id, result);\n      }\n\n      console.log(`Accessibility tests completed: ${results.length} tests run`);\n\n      this.emit('testsCompleted', results);\n      return results;\n    } catch (error) {\n      console.error('Failed to run accessibility tests:', error);\n      this.emit('error', error);\n      throw error;\n    }\n  }\n\n  /**\n   * Run specific accessibility test\n   *\n   * @param testName - Test name\n   * @param url - URL to test\n   * @param options - Test options\n   * @returns Test result\n   */\n  async runTest(\n    testName: string,\n    url: string,\n    options: {\n      timeout?: number;\n      retries?: number;\n    } = {}\n  ): Promise<AccessibilityTestResult> {\n    const testId = `test_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n    const startTime = Date.now();\n\n    try {\n      console.log(`Running test: ${testName}`);\n\n      let result: AccessibilityTestResult;\n      let attempts = 0;\n      const maxAttempts = options.retries || this.config.retries;\n\n      do {\n        attempts++;\n        result = await this.executeTest(testName, url, options.timeout || this.config.timeout);\n\n        if (result.status === 'pass' || attempts >= maxAttempts) {\n          break;\n        }\n\n        console.log(`Test failed, retrying (${attempts}/${maxAttempts})...`);\n        await this.delay(1000); // Wait 1 second before retry\n      } while (attempts < maxAttempts);\n\n      result.id = testId;\n      result.duration = Date.now() - startTime;\n      result.timestamp = new Date();\n\n      this.testResults.set(testId, result);\n      this.emit('testCompleted', result);\n\n      return result;\n    } catch (error) {\n      console.error(`Test '${testName}' failed:`, error);\n\n      const errorResult: AccessibilityTestResult = {\n        id: testId,\n        name: testName,\n        status: 'fail',\n        description: `Test failed: ${error instanceof Error ? error.message : String(error)}`,\n        impact: 'serious',\n        violations: [],\n        passes: [],\n        inapplicable: [],\n        timestamp: new Date(),\n        duration: Date.now() - startTime,\n        url,\n        metadata: { error: error instanceof Error ? error.message : String(error) }\n      };\n\n      this.testResults.set(testId, errorResult);\n      this.emit('testFailed', errorResult);\n      throw error;\n    }\n  }\n\n  /**\n   * Generate accessibility report\n   *\n   * @param results - Test results\n   * @param options - Report options\n   * @returns Report content\n   */\n  generateReport(\n    results: AccessibilityTestResult[],\n    options: {\n      format?: 'json' | 'html' | 'csv';\n      includePasses?: boolean;\n      includeViolations?: boolean;\n      includeSuggestions?: boolean;\n    } = {}\n  ): string {\n    const format = options.format || this.config.reportFormat;\n    const includePasses = options.includePasses !== false;\n    const includeViolations = options.includeViolations !== false;\n    const includeSuggestions = options.includeSuggestions !== false;\n\n    switch (format) {\n      case 'json':\n        return this.generateJSONReport(results, { includePasses, includeViolations, includeSuggestions });\n      case 'html':\n        return this.generateHTMLReport(results, { includePasses, includeViolations, includeSuggestions });\n      case 'csv':\n        return this.generateCSVReport(results, { includePasses, includeViolations, includeSuggestions });\n      default:\n        throw new Error(`Unsupported report format: ${format}`);\n    }\n  }\n\n  /**\n   * Get test result by ID\n   *\n   * @param testId - Test ID\n   * @returns Test result or undefined\n   */\n  getTestResult(testId: string): AccessibilityTestResult | undefined {\n    return this.testResults.get(testId);\n  }\n\n  /**\n   * Get all test results\n   *\n   * @returns Array of test results\n   */\n  getAllTestResults(): AccessibilityTestResult[] {\n    return Array.from(this.testResults.values());\n  }\n\n  /**\n   * Clear test results\n   */\n  clearTestResults(): void {\n    this.testResults.clear();\n    this.emit('testResultsCleared');\n  }\n\n  /**\n   * Get testing statistics\n   *\n   * @returns Statistics\n   */\n  getStats(): {\n    totalTests: number;\n    passedTests: number;\n    failedTests: number;\n    averageDuration: number;\n    framework: string;\n  } {\n    const totalTests = this.testResults.size;\n    const passedTests = Array.from(this.testResults.values()).filter(r => r.status === 'pass').length;\n    const failedTests = Array.from(this.testResults.values()).filter(r => r.status === 'fail').length;\n    const totalDuration = Array.from(this.testResults.values()).reduce((sum, r) => sum + r.duration, 0);\n    const averageDuration = totalTests > 0 ? totalDuration / totalTests : 0;\n\n    return {\n      totalTests,\n      passedTests,\n      failedTests,\n      averageDuration,\n      framework: this.config.framework\n    };\n  }\n\n  /**\n   * Initialize testing framework\n   */\n  private async initializeTestingFramework(): Promise<void> {\n    console.log(`Initializing ${this.config.framework} testing framework...`);\n\n    // Framework-specific initialization\n    switch (this.config.framework) {\n      case 'axe-core':\n        // Initialize axe-core\n        break;\n      case 'puppeteer':\n        // Initialize puppeteer\n        break;\n      case 'jsdom':\n        // Initialize jsdom\n        break;\n      default:\n        throw new Error(`Unsupported testing framework: ${this.config.framework}`);\n    }\n  }\n\n  /**\n   * Run axe-core tests\n   *\n   * @param url - URL to test\n   * @param rules - Rules to test\n   * @param ignoreRules - Rules to ignore\n   * @param timeout - Test timeout\n   * @returns Test results\n   */\n  private async runAxeCoreTests(\n    url: string,\n    rules: string[],\n    ignoreRules: string[],\n    timeout: number\n  ): Promise<AccessibilityTestResult[]> {\n    // This is a simplified implementation\n    // In a real implementation, you would use axe-core\n    const results: AccessibilityTestResult[] = [];\n\n    // Simulate axe-core test results\n    results.push({\n      id: `axe_${Date.now()}`,\n      name: 'Color Contrast',\n      status: 'pass',\n      description: 'Check color contrast ratios',\n      impact: 'serious',\n      violations: [],\n      passes: [],\n      inapplicable: [],\n      timestamp: new Date(),\n      duration: 1000,\n      url,\n      metadata: { framework: 'axe-core' }\n    });\n\n    return results;\n  }\n\n  /**\n   * Run puppeteer tests\n   *\n   * @param url - URL to test\n   * @param rules - Rules to test\n   * @param ignoreRules - Rules to ignore\n   * @param timeout - Test timeout\n   * @returns Test results\n   */\n  private async runPuppeteerTests(\n    url: string,\n    rules: string[],\n    ignoreRules: string[],\n    timeout: number\n  ): Promise<AccessibilityTestResult[]> {\n    // This is a simplified implementation\n    // In a real implementation, you would use puppeteer\n    const results: AccessibilityTestResult[] = [];\n\n    // Simulate puppeteer test results\n    results.push({\n      id: `puppeteer_${Date.now()}`,\n      name: 'Keyboard Navigation',\n      status: 'pass',\n      description: 'Check keyboard navigation functionality',\n      impact: 'serious',\n      violations: [],\n      passes: [],\n      inapplicable: [],\n      timestamp: new Date(),\n      duration: 2000,\n      url,\n      metadata: { framework: 'puppeteer' }\n    });\n\n    return results;\n  }\n\n  /**\n   * Run JSDOM tests\n   *\n   * @param url - URL to test\n   * @param rules - Rules to test\n   * @param ignoreRules - Rules to ignore\n   * @param timeout - Test timeout\n   * @returns Test results\n   */\n  private async runJSDOMTests(\n    url: string,\n    rules: string[],\n    ignoreRules: string[],\n    timeout: number\n  ): Promise<AccessibilityTestResult[]> {\n    // This is a simplified implementation\n    // In a real implementation, you would use jsdom\n    const results: AccessibilityTestResult[] = [];\n\n    // Simulate jsdom test results\n    results.push({\n      id: `jsdom_${Date.now()}`,\n      name: 'Semantic HTML',\n      status: 'pass',\n      description: 'Check semantic HTML structure',\n      impact: 'moderate',\n      violations: [],\n      passes: [],\n      inapplicable: [],\n      timestamp: new Date(),\n      duration: 500,\n      url,\n      metadata: { framework: 'jsdom' }\n    });\n\n    return results;\n  }\n\n  /**\n   * Execute a specific test\n   *\n   * @param testName - Test name\n   * @param url - URL to test\n   * @param timeout - Test timeout\n   * @returns Test result\n   */\n  private async executeTest(\n    testName: string,\n    url: string,\n    timeout: number\n  ): Promise<AccessibilityTestResult> {\n    // This is a simplified implementation\n    // In a real implementation, you would execute the actual test\n    return {\n      id: '',\n      name: testName,\n      status: 'pass',\n      description: `Test: ${testName}`,\n      impact: 'moderate',\n      violations: [],\n      passes: [],\n      inapplicable: [],\n      timestamp: new Date(),\n      duration: 1000,\n      url,\n      metadata: {}\n    };\n  }\n\n  /**\n   * Generate JSON report\n   *\n   * @param results - Test results\n   * @param options - Report options\n   * @returns JSON report\n   */\n  private generateJSONReport(\n    results: AccessibilityTestResult[],\n    options: {\n      includePasses: boolean;\n      includeViolations: boolean;\n      includeSuggestions: boolean;\n    }\n  ): string {\n    const report = {\n      timestamp: new Date().toISOString(),\n      summary: {\n        totalTests: results.length,\n        passedTests: results.filter(r => r.status === 'pass').length,\n        failedTests: results.filter(r => r.status === 'fail').length,\n        inapplicableTests: results.filter(r => r.status === 'inapplicable').length\n      },\n      results: results.map(result => ({\n        id: result.id,\n        name: result.name,\n        status: result.status,\n        description: result.description,\n        impact: result.impact,\n        duration: result.duration,\n        url: result.url,\n        violations: options.includeViolations ? result.violations : [],\n        passes: options.includePasses ? result.passes : [],\n        inapplicable: result.inapplicable\n      }))\n    };\n\n    return JSON.stringify(report, null, 2);\n  }\n\n  /**\n   * Generate HTML report\n   *\n   * @param results - Test results\n   * @param options - Report options\n   * @returns HTML report\n   */\n  private generateHTMLReport(\n    results: AccessibilityTestResult[],\n    options: {\n      includePasses: boolean;\n      includeViolations: boolean;\n      includeSuggestions: boolean;\n    }\n  ): string {\n    const passedTests = results.filter(r => r.status === 'pass').length;\n    const failedTests = results.filter(r => r.status === 'fail').length;\n    const totalTests = results.length;\n\n    return `\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Accessibility Test Report</title>\n    <style>\n        body { font-family: Arial, sans-serif; margin: 20px; }\n        .summary { background: #f5f5f5; padding: 20px; border-radius: 5px; margin-bottom: 20px; }\n        .test { border: 1px solid #ddd; margin: 10px 0; padding: 15px; border-radius: 5px; }\n        .pass { border-left: 5px solid #4CAF50; }\n        .fail { border-left: 5px solid #f44336; }\n        .inapplicable { border-left: 5px solid #ff9800; }\n    </style>\n</head>\n<body>\n    <h1>Accessibility Test Report</h1>\n    <div class=\"summary\">\n        <h2>Summary</h2>\n        <p>Total Tests: ${totalTests}</p>\n        <p>Passed: ${passedTests}</p>\n        <p>Failed: ${failedTests}</p>\n        <p>Success Rate: ${totalTests > 0 ? ((passedTests / totalTests) * 100).toFixed(1) : 0}%</p>\n    </div>\n    <h2>Test Results</h2>\n    ${results.map(result => `\n        <div class=\"test ${result.status}\">\n            <h3>${result.name}</h3>\n            <p><strong>Status:</strong> ${result.status}</p>\n            <p><strong>Description:</strong> ${result.description}</p>\n            <p><strong>Impact:</strong> ${result.impact}</p>\n            <p><strong>Duration:</strong> ${result.duration}ms</p>\n            ${result.url ? `<p><strong>URL:</strong> ${result.url}</p>` : ''}\n        </div>\n    `).join('')}\n</body>\n</html>`;\n  }\n\n  /**\n   * Generate CSV report\n   *\n   * @param results - Test results\n   * @param options - Report options\n   * @returns CSV report\n   */\n  private generateCSVReport(\n    results: AccessibilityTestResult[],\n    options: {\n      includePasses: boolean;\n      includeViolations: boolean;\n      includeSuggestions: boolean;\n    }\n  ): string {\n    const headers = ['Test Name', 'Status', 'Description', 'Impact', 'Duration (ms)', 'URL'];\n    const rows = results.map(result => [\n      result.name,\n      result.status,\n      result.description,\n      result.impact,\n      result.duration,\n      result.url || ''\n    ]);\n\n    return [headers, ...rows].map(row => row.map(cell => `\"${cell}\"`).join(',')).join('\\n');\n  }\n\n  /**\n   * Delay function\n   *\n   * @param ms - Milliseconds to delay\n   */\n  private delay(ms: number): Promise<void> {\n    return new Promise(resolve => setTimeout(resolve, ms));\n  }\n}\n"]}