# Cremote Accessibility Integration Tests

## Overview

This directory contains comprehensive integration tests for Cremote's accessibility testing tools. The tests validate all ADA/WCAG compliance features against known accessible and inaccessible test pages.

## Test Coverage

### Tools Tested

1. **Axe-Core Integration** (`web_inject_axe_cremotemcp`, `web_run_axe_cremotemcp`)
   - Library injection
   - WCAG 2.1 AA/AAA automated testing
   - Violation detection and reporting

2. **Contrast Checking** (`web_contrast_check_cremotemcp`)
   - WCAG contrast ratio calculations
   - AA/AAA compliance validation
   - Violation reporting with element details

3. **Keyboard Navigation** (`web_keyboard_test_cremotemcp`)
   - Focusability testing
   - Focus indicator validation
   - Keyboard trap detection
   - Tab order verification

4. **Zoom Testing** (`web_zoom_test_cremotemcp`)
   - Multi-level zoom testing (100%, 200%, 400%)
   - Horizontal scroll detection
   - Text readability validation
   - Overflow detection

5. **Reflow Testing** (`web_reflow_test_cremotemcp`)
   - Responsive breakpoint testing (320px, 1280px)
   - Horizontal scroll detection
   - Responsive layout validation
   - Overflow detection

6. **Screenshot Enhancements** (`web_screenshot_cremotemcp`)
   - Zoom level screenshots
   - Viewport size screenshots
   - Full page screenshots

7. **Library Injection** (`console_command_cremotemcp`)
   - External library injection (jQuery, Lodash, etc.)
   - Custom URL injection
   - Command execution with injected libraries

8. **Accessibility Tree** (`get_accessibility_tree_cremotemcp`)
   - Full tree retrieval
   - Depth limiting
   - Contrast annotation support

## Test Files

### Test Pages

- **`testdata/test-accessible.html`** - WCAG 2.1 AA compliant page
  - High contrast colors (4.5:1+ for normal text)
  - Visible focus indicators
  - Semantic HTML
  - Proper ARIA labels
  - Responsive design (no horizontal scroll at 320px)
  - Keyboard accessible controls
  - Proper heading hierarchy
  - Form labels and associations

- **`testdata/test-inaccessible.html`** - Page with known violations
  - Low contrast text (3.2:1, 1.5:1)
  - Missing focus indicators
  - Non-keyboard accessible elements
  - Missing alt text
  - Fixed width causing horizontal scroll
  - Missing form labels
  - Heading hierarchy violations
  - Duplicate IDs
  - Empty links and buttons
  - Incorrect ARIA usage

### Test Suite

- **`accessibility_integration_test.go`** - Main test suite
  - `TestAccessibilityToolsIntegration` - Tests all tools on accessible page
  - `TestInaccessiblePage` - Tests violation detection on inaccessible page
  - `BenchmarkAxeCore` - Performance benchmarks

## Prerequisites

### 1. Start Cremote Daemon

```bash
# Start the daemon on default port 9223
cremote-daemon
```

### 2. Start Test HTTP Server

You need a simple HTTP server to serve the test HTML files:

```bash
# Option 1: Python 3
cd test/testdata
python3 -m http.server 8080

# Option 2: Python 2
cd test/testdata
python -m SimpleHTTPServer 8080

# Option 3: Node.js (http-server)
cd test/testdata
npx http-server -p 8080

# Option 4: Go
cd test/testdata
go run -m http.server 8080
```

The test server should serve files at `http://localhost:8080/`.

### 3. Set Environment Variable

```bash
export INTEGRATION_TESTS=true
```

## Running Tests

### Run All Integration Tests

```bash
cd test
INTEGRATION_TESTS=true go test -v
```

### Run Specific Test

```bash
cd test
INTEGRATION_TESTS=true go test -v -run TestAccessibilityToolsIntegration
```

### Run Specific Sub-Test

```bash
cd test
INTEGRATION_TESTS=true go test -v -run TestAccessibilityToolsIntegration/AxeCoreIntegration
```

### Run Benchmarks

```bash
cd test
INTEGRATION_TESTS=true go test -v -bench=. -benchmem
```

### Run with Coverage

```bash
cd test
INTEGRATION_TESTS=true go test -v -cover -coverprofile=coverage.out
go tool cover -html=coverage.out
```

## Expected Results

### Accessible Page Tests

When testing `test-accessible.html`, expect:

- **Axe-Core**: Few or no violations (< 5)
- **Contrast**: High AA pass rate (> 80%)
- **Keyboard**: High focusability rate (> 80%)
- **Zoom**: No horizontal scroll at 200%
- **Reflow**: No horizontal scroll at 320px

### Inaccessible Page Tests

When testing `test-inaccessible.html`, expect:

- **Axe-Core**: Multiple violations detected
- **Contrast**: Multiple AA failures
- **Keyboard**: Multiple focusability issues
- **Zoom**: Potential horizontal scroll issues
- **Reflow**: Horizontal scroll at 320px

## Test Output Example

```
=== RUN   TestAccessibilityToolsIntegration
=== RUN   TestAccessibilityToolsIntegration/AxeCoreIntegration
    accessibility_integration_test.go:72: Axe-core results: 2 violations, 45 passes, 3 incomplete, 12 inapplicable
=== RUN   TestAccessibilityToolsIntegration/ContrastChecking
    accessibility_integration_test.go:98: Contrast check: 38 elements, 36 AA pass, 2 AA fail, 28 AAA pass, 10 AAA fail
=== RUN   TestAccessibilityToolsIntegration/KeyboardNavigation
    accessibility_integration_test.go:124: Keyboard test: 25 elements, 23 focusable, 2 not focusable, 1 missing focus indicator, 0 keyboard traps
=== RUN   TestAccessibilityToolsIntegration/ZoomTesting
    accessibility_integration_test.go:152: Zoom test: tested 3 levels, found 0 issues
=== RUN   TestAccessibilityToolsIntegration/ReflowTesting
    accessibility_integration_test.go:180: Reflow test: tested 2 breakpoints, found 0 issues
=== RUN   TestAccessibilityToolsIntegration/ScreenshotEnhancements
    accessibility_integration_test.go:208: Screenshot functionality verified
=== RUN   TestAccessibilityToolsIntegration/LibraryInjection
    accessibility_integration_test.go:230: Library injection functionality verified
=== RUN   TestAccessibilityToolsIntegration/AccessibilityTree
    accessibility_integration_test.go:248: Accessibility tree: 156 nodes
--- PASS: TestAccessibilityToolsIntegration (15.23s)
    --- PASS: TestAccessibilityToolsIntegration/AxeCoreIntegration (3.45s)
    --- PASS: TestAccessibilityToolsIntegration/ContrastChecking (2.12s)
    --- PASS: TestAccessibilityToolsIntegration/KeyboardNavigation (1.89s)
    --- PASS: TestAccessibilityToolsIntegration/ZoomTesting (2.34s)
    --- PASS: TestAccessibilityToolsIntegration/ReflowTesting (1.98s)
    --- PASS: TestAccessibilityToolsIntegration/ScreenshotEnhancements (0.45s)
    --- PASS: TestAccessibilityToolsIntegration/LibraryInjection (1.23s)
    --- PASS: TestAccessibilityToolsIntegration/AccessibilityTree (1.77s)
PASS
ok      git.teamworkapps.com/shortcut/cremote/test      15.234s
```

## Troubleshooting

### Tests Skip with "Skipping integration tests"

**Problem:** Tests are being skipped.

**Solution:** Set the environment variable:
```bash
export INTEGRATION_TESTS=true
```

### "Failed to navigate to test page"

**Problem:** Test HTTP server is not running or not accessible.

**Solution:** 
1. Start HTTP server on port 8080
2. Verify server is accessible: `curl http://localhost:8080/test-accessible.html`
3. Check firewall settings

### "Failed to connect to daemon"

**Problem:** Cremote daemon is not running.

**Solution:**
```bash
# Start daemon
cremote-daemon

# Verify it's running
ps aux | grep cremote-daemon
```

### "Failed to inject axe-core"

**Problem:** Network issues or CDN unavailable.

**Solution:**
1. Check internet connectivity
2. Try alternative axe-core version
3. Check if CDN is accessible: `curl https://cdn.jsdelivr.net/npm/axe-core@4.8.0/axe.min.js`

### Tests Timeout

**Problem:** Tests are timing out.

**Solution:**
1. Increase timeout values in test code
2. Check system resources (CPU, memory)
3. Verify Chromium is not hanging

## CI/CD Integration

### GitHub Actions Example

```yaml
name: Accessibility Integration Tests
on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      
      - name: Set up Go
        uses: actions/setup-go@v2
        with:
          go-version: 1.21
      
      - name: Install dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y chromium-browser
      
      - name: Start cremote daemon
        run: |
          ./cremote-daemon &
          sleep 5
      
      - name: Start test server
        run: |
          cd test/testdata
          python3 -m http.server 8080 &
          sleep 2
      
      - name: Run integration tests
        run: |
          cd test
          INTEGRATION_TESTS=true go test -v -cover
      
      - name: Upload coverage
        uses: codecov/codecov-action@v2
        with:
          files: ./test/coverage.out
```

## Adding New Tests

### 1. Create Test Function

```go
func testNewFeature(c *client.Client) func(*testing.T) {
    return func(t *testing.T) {
        // Test implementation
        result, err := c.NewFeature("", params, 10)
        if err != nil {
            t.Fatalf("Failed: %v", err)
        }
        
        // Assertions
        if result == nil {
            t.Error("Result is nil")
        }
    }
}
```

### 2. Add to Test Suite

```go
func TestAccessibilityToolsIntegration(t *testing.T) {
    // ... existing setup ...
    
    t.Run("NewFeature", testNewFeature(c))
}
```

### 3. Update Documentation

Update this README with:
- Tool description
- Expected results
- Common issues

## Performance Benchmarks

Expected performance on modern hardware:

- **Axe-Core**: ~2-4 seconds per run
- **Contrast Check**: ~1-2 seconds for 50 elements
- **Keyboard Test**: ~1-2 seconds for 30 elements
- **Zoom Test**: ~2-3 seconds for 3 zoom levels
- **Reflow Test**: ~1-2 seconds for 2 breakpoints

## Support

For issues or questions:
- Check the main documentation: `docs/ADA_TESTING_GUIDE.md`
- Review LLM guide: `docs/llm_ada_testing.md`
- File an issue: git.teamworkapps.com/shortcut/cremote/issues

---

**Last Updated:** 2025-10-02
**Version:** 1.0.0

