9.8 KiB
9.8 KiB
🔊 Screen Reader System Testing Guide
📋 Overview
Complete screen reader support for blind and visually impaired players with:
- ✅ Speech synthesis (text-to-speech)
- ✅ ARIA live regions
- ✅ Audio cues (beeps/tones)
- ✅ Keyboard navigation
- ✅ Context announcements
- ✅ Verbose mode
🎯 Features to Test
1. Speech Synthesis
Test Cases:
- System announces "Screen reader system ready" on startup
- Speech rate can be adjusted (0.1 - 10)
- Speech pitch can be adjusted (0 - 2)
- Speech volume can be adjusted (0 - 1)
- Multiple voices are available
- Voice can be changed
- Speech can be interrupted
- Speech can be stopped
How to Test:
// In browser console (F12):
const sr = game.scene.scenes[1].screenReader;
// Test basic speech
sr.speak('Hello, this is a test.');
// Test with priority
sr.speak('This is an alert!', 'alert', true);
// Adjust settings
sr.setRate(1.5); // Faster
sr.setRate(0.5); // Slower
sr.setPitch(1.5); // Higher pitch
sr.setPitch(0.5); // Lower pitch
sr.setVolume(0.5); // 50% volume
// List available voices
console.log(sr.getAvailableVoices());
// Change voice
sr.setVoice('Microsoft David Desktop'); // Windows
sr.setVoice('Alex'); // macOS
// Stop speech
sr.stop();
2. Keyboard Navigation
Keyboard Shortcuts:
- Ctrl+H: Help (lists all commands)
- Ctrl+R: Repeat last announcement
- Ctrl+S: Announce settings
- Ctrl+P: Announce position
- Ctrl+I: Announce inventory
- Ctrl+N: Announce nearby objects
- Ctrl+T: Announce stats (health, hunger, stamina)
- Ctrl+V: Toggle verbose mode
Test Cases:
- All keyboard shortcuts work
- Help command lists all shortcuts
- Repeat command replays last announcement
- Settings command announces current settings
- Position command announces X, Y coordinates
- Inventory command lists items
- Nearby command describes surroundings
- Stats command announces health/hunger/stamina
How to Test:
- Start the game
- Press Ctrl+H to hear help
- Press Ctrl+P to hear position
- Press Ctrl+I to hear inventory
- Press Ctrl+T to hear stats
- Press Ctrl+N to hear nearby objects
- Press Ctrl+R to repeat last announcement
- Press Ctrl+V to toggle verbose mode
3. Audio Cues
Available Cues:
- Focus: 440 Hz, 100ms (UI element focused)
- Select: 880 Hz, 150ms (Item selected)
- Error: 220 Hz, 300ms (Error occurred)
- Success: 660 Hz, 200ms (Action successful)
- Navigation: 550 Hz, 80ms (Menu navigation)
- Inventory: 750 Hz, 120ms (Inventory opened)
- Damage: 200 Hz, 250ms (Player took damage)
- Pickup: 1000 Hz, 100ms (Item picked up)
Test Cases:
- Audio cues play for different actions
- Cues can be toggled on/off
- Cue frequencies are distinct
- Cues don't overlap speech
How to Test:
const sr = game.scene.scenes[1].screenReader;
// Test different audio cues
sr.playAudioCue('focus');
sr.playAudioCue('select');
sr.playAudioCue('error');
sr.playAudioCue('success');
sr.playAudioCue('navigation');
sr.playAudioCue('inventory');
sr.playAudioCue('damage');
sr.playAudioCue('pickup');
// Toggle sound cues
sr.toggleSoundCues(); // Off
sr.toggleSoundCues(); // On
4. Context Announcements
Available Contexts:
- menu: Main menu
- game: In game
- inventory: Inventory screen
- crafting: Crafting menu
- dialogue: Dialogue
- combat: In combat
- building: Build mode
- map: Map view
Test Cases:
- Context is announced when entering new area
- Context includes navigation instructions
- Context can be manually triggered
How to Test:
const sr = game.scene.scenes[1].screenReader;
// Announce different contexts
sr.announceContext('menu');
sr.announceContext('game');
sr.announceContext('inventory');
sr.announceContext('crafting');
sr.announceContext('dialogue');
sr.announceContext('combat');
sr.announceContext('building');
sr.announceContext('map');
5. Action Announcements
Supported Actions:
- move, attack, interact, pickup, drop
- craft, build, harvest, plant, dig
- damage, heal, die, respawn
Test Cases:
- Actions are announced when performed
- Action details are included (if provided)
- Audio cue plays with announcement
How to Test:
const sr = game.scene.scenes[1].screenReader;
// Test action announcements
sr.announceAction('move');
sr.announceAction('attack', 'zombie');
sr.announceAction('pickup', 'carrot');
sr.announceAction('craft', 'wooden sword');
sr.announceAction('build', 'fence');
sr.announceAction('harvest', 'wheat');
sr.announceAction('damage', '10 health');
sr.announceAction('heal', '25 health');
6. Game State Announcements
Test Cases:
- Stats announcement includes health, hunger, stamina
- Inventory announcement lists items and gold
- Position announcement includes X, Y coordinates
- Nearby announcement describes surroundings
- Verbose mode provides detailed information
How to Test:
const sr = game.scene.scenes[1].screenReader;
// Announce game state
sr.announceStats();
sr.announceInventory();
sr.announcePosition();
sr.announceNearby();
// Toggle verbose mode for detailed info
sr.toggleVerboseMode(); // On
sr.announceInventory(); // Detailed item list
sr.toggleVerboseMode(); // Off
7. ARIA Live Regions
Test Cases:
- Polite region exists (non-interrupting)
- Alert region exists (interrupting)
- Regions are hidden from visual display
- Screen readers detect region updates
How to Test:
- Open browser DevTools (F12)
- Inspect DOM for ARIA live regions
- Verify
role="status"andaria-live="polite" - Verify
role="alert"andaria-live="assertive" - Test with actual screen reader (NVDA, JAWS, VoiceOver)
8. Auto-Narration
Test Cases:
- Low health warning is announced automatically
- UI changes are announced (if enabled)
- Notifications are announced
- Auto-narration can be toggled
How to Test:
const sr = game.scene.scenes[1].screenReader;
// Toggle auto-narration
sr.toggleAutoNarrate(); // Off
sr.toggleAutoNarrate(); // On
// Test notifications
sr.announceNotification('You found a treasure!');
sr.announceNotification('Error: Cannot craft item', 'alert');
// Test UI announcements
sr.announceUI('Inventory', 'opened');
sr.announceUI('Crafting menu', 'closed');
9. Settings Persistence
Test Cases:
- Settings are saved to localStorage
- Settings persist after page reload
- All settings are saved (rate, pitch, volume, etc.)
How to Test:
const sr = game.scene.scenes[1].screenReader;
// Change settings
sr.setRate(1.5);
sr.setPitch(1.2);
sr.setVolume(0.8);
sr.toggleVerboseMode();
sr.toggleSoundCues();
// Reload page (F5)
// Settings should be restored
// Verify settings
sr.announceSettings();
10. Screen Reader Compatibility
Supported Screen Readers:
- NVDA (Windows) - Free
- JAWS (Windows) - Commercial
- VoiceOver (macOS/iOS) - Built-in
- TalkBack (Android) - Built-in
- ChromeVox (Chrome OS) - Built-in
Test Cases:
- Works with NVDA
- Works with JAWS
- Works with VoiceOver
- ARIA regions are detected
- Keyboard navigation works
How to Test:
- Install/Enable screen reader
- Start NovaFarma
- Navigate using keyboard only
- Verify announcements are heard
- Test all keyboard shortcuts
- Test ARIA live regions
🎮 Integration Testing
Complete Workflow Test:
const sr = game.scene.scenes[1].screenReader;
// 1. Help
sr.announceHelp();
// 2. Check stats
sr.announceStats();
// 3. Check inventory
sr.announceInventory();
// 4. Check position
sr.announcePosition();
// 5. Check nearby
sr.announceNearby();
// 6. Perform action
sr.announceAction('move', 'north');
sr.announceAction('pickup', 'wood');
// 7. Change context
sr.announceContext('inventory');
// 8. Adjust settings
sr.setRate(1.2);
sr.setPitch(1.0);
sr.setVolume(0.9);
// 9. Toggle features
sr.toggleVerboseMode();
sr.toggleSoundCues();
sr.toggleAutoNarrate();
// 10. Verify settings
sr.announceSettings();
📊 Expected Results
✅ Success Criteria:
- Speech synthesis works on all platforms
- All keyboard shortcuts function correctly
- Audio cues are distinct and helpful
- Context announcements provide clear guidance
- Action announcements are timely and accurate
- Game state announcements are comprehensive
- ARIA live regions work with screen readers
- Auto-narration detects important events
- Settings persist after reload
- Compatible with major screen readers
❌ Known Issues:
- Speech synthesis voices vary by platform
- Some browsers may require user interaction before speech
- Audio cues may not work in all browsers
🐛 Bug Reporting
If you find any issues, please report:
- What you were testing
- What you expected to happen
- What actually happened
- Browser and OS
- Screen reader (if applicable)
- Console errors (if any)
📝 Quick Reference
Keyboard Shortcuts:
| Shortcut | Action |
|---|---|
| Ctrl+H | Help |
| Ctrl+R | Repeat |
| Ctrl+S | Settings |
| Ctrl+P | Position |
| Ctrl+I | Inventory |
| Ctrl+N | Nearby |
| Ctrl+T | Stats |
| Ctrl+V | Verbose Mode |
API Commands:
const sr = game.scene.scenes[1].screenReader;
sr.speak(text, priority, interrupt);
sr.announceStats();
sr.announceInventory();
sr.announcePosition();
sr.announceNearby();
sr.announceAction(action, details);
sr.setRate(rate);
sr.setPitch(pitch);
sr.setVolume(volume);
sr.toggleVerboseMode();
sr.toggleSoundCues();
sr.toggleAutoNarrate();
Last Updated: 2025-12-12
Version: 2.5.0
Status: ✅ Ready for Testing