Version: 1.0
Date: 2026-03-10
Project: EdgeLang - AI Chrome Extension for Vocabulary-at-the-Edge Language Learning
This document defines the comprehensive test plan for EdgeLang, including test objectives, scope, strategy, resources, and detailed test cases. The test plan ensures all functional and non-functional requirements are validated before release.
This test plan covers:
- Unit tests for individual functions
- Integration tests for component interaction
- System tests for end-to-end workflows
- UI/UX tests for user interfaces
- Performance tests for timing requirements
- Security tests for data protection
- Compatibility tests across platforms
- Verify all functional requirements are implemented correctly
- Validate non-functional requirements (performance, security, reliability)
- Ensure proper error handling and graceful degradation
- Confirm user experience meets usability standards
- Identify and document defects before release
| Level | Description | Tools |
|---|---|---|
| Unit | Individual functions and methods | Jest, Mocha |
| Integration | Component interaction | Puppeteer, Playwright |
| System | End-to-end workflows | Puppeteer, Selenium |
| Manual | UI validation, exploratory | N/A |
| Type | Purpose | Coverage |
|---|---|---|
| Functional | Verify feature behavior | All FRs |
| Regression | Ensure no breakage | All features |
| Performance | Timing, load | NFRs |
| Security | Data protection | NFRs |
| Usability | User experience | UI components |
- Browser: Chrome (latest, latest-1, latest-2)
- Platforms: Windows 10/11, macOS 12+, Ubuntu 22.04+
- Extensions: Developer mode, unpacked loading
| Role | Responsibility |
|---|---|
| Test Lead | Test planning, coordination |
| QA Engineer | Test case creation, execution |
| Developer | Unit tests, fix verification |
| UX Designer | Usability validation |
| Category | Source |
|---|---|
| Web pages | Alexa top 100 (multiple languages) |
| Vocabulary | Common word lists per language |
| Calibration questions | Generated from word banks |
| User profiles | Simulated learning histories |
Objective: Verify extension installs without errors
Steps:
- Open Chrome with clean profile
- Navigate to chrome://extensions
- Enable Developer mode
- Click "Load unpacked"
- Select extension directory
Expected Result: Extension icon appears in toolbar, no errors in console
Pass Criteria: Icon visible, no console errors
Objective: Verify options page opens on first install
Steps:
- Load extension with fresh profile
- Observe automatic behavior
Expected Result: Options page opens automatically
Pass Criteria: Options page displayed within 3 seconds
Objective: Verify settings persist after reinstall
Steps:
- Configure settings (language, API keys)
- Uninstall extension
- Re-install extension
Expected Result: Settings retained (if using chrome.storage.sync)
Pass Criteria: Settings preserved
Objective: Verify text extraction from various page types
Test Data:
| Page Type | Example |
|---|---|
| Static HTML | News article |
| SPA | Gmail, Twitter |
| Iframe | Embedded YouTube |
| Dynamic | Infinite scroll |
Steps:
- Load each page type
- Extract text via content script
- Verify text captured
Expected Result: Text extracted from visible content
Pass Criteria: >90% visible text captured
Objective: Verify sensitive fields are ignored
Test Data:
<input type="password" id="pwd" value="secret123">
<input type="text" id="cc" value="4111111111111111">
<input type="text" name="cvv" value="123">
<textarea name="notes">Sensitive data</textarea>Steps:
- Load page with sensitive fields
- Run text extraction
- Verify sensitive values not included
Expected Result: No sensitive content in extracted text
Pass Criteria: Passwords, credit cards, CVVs not extracted
Objective: Verify visual cues appear on correct elements
Steps:
- Navigate to foreign language page
- Wait for cues to load
- Inspect DOM for cue elements
Expected Result: Visual cues rendered on target words
Pass Criteria: Cues visible on configured percentage of words
Objective: Verify all visual cue styles render correctly
Test Cases:
| Style | Verification |
|---|---|
| Subtle underline | CSS dotted border |
| Background tint | Background color applied |
| Corner dot | Pseudo-element visible |
| Cursor change | CSS cursor property |
| Border highlight | Border visible on phrases |
Steps:
- Change cue style in options
- Navigate to test page
- Verify style applied
Expected Result: Each style renders correctly
Pass Criteria: All 5 styles functional
Objective: Verify popup appears on hover
Steps:
- Hover over cued item
- Measure time to popup
- Verify popup content
Expected Result: Popup appears within 200ms with options
Pass Criteria: Popup visible, contains translation options
Objective: Verify configurable option count
Test Values: 3, 4, 5, 6 options
Steps:
- Set option count in options
- Hover over cued item
- Count displayed options
Expected Result: Number of options matches setting
Pass Criteria: All values (3-6) work correctly
Objective: Verify answer selection and feedback display
Steps:
- Hover over cued item
- Click correct answer
- Observe feedback
- Click incorrect answer
- Observe feedback
Expected Result: Correct/incorrect feedback displayed
Pass Criteria: Feedback shows for both correct and incorrect
Objective: Verify explanation appears for incorrect answers
Steps:
- Select incorrect answer
- Verify explanation shown
- Check explanation content
Expected Result: Explanation includes:
- Why selected is wrong
- Why correct is right
- Usage nuance
Pass Criteria: All explanation components visible
Objective: Verify passive mode on foreign language pages
Steps:
- Set target language to Spanish
- Navigate to Spanish news site
- Verify cues appear
- Verify popup shows translation options
Expected Result: Passive mode active on foreign page
Pass Criteria: Translation options in popup
Objective: Verify active mode on native language pages
Steps:
- Set native language to English
- Navigate to English site
- Verify cues appear
- Verify popup shows target language options
Expected Result: Active mode active on native page
Pass Criteria: Target language options in popup
Objective: Verify automatic language detection
Steps:
- Navigate to Spanish page
- Verify passive mode (auto)
- Navigate to English page
- Verify active mode (auto)
Expected Result: Mode switches based on page language
Pass Criteria: Correct mode for each language
Objective: Verify manual mode toggle works
Steps:
- On foreign page, switch to active mode manually
- Verify active mode active
- Refresh page
- Verify override persists (if session-based)
Expected Result: Manual override changes mode
Pass Criteria: Mode changes as toggled
Objective: Verify resolved items stop appearing
Steps:
- Answer item correctly
- Navigate away
- Return to same page
- Verify item no longer has visual cue
Expected Result: Resolved item hidden
Pass Criteria: Correct answer = item resolved
Objective: Verify user can reset resolved items
Steps:
- Find resolved item in options
- Click reset for item
- Navigate to page with item
- Verify cue reappears
Expected Result: Reset item becomes active again
Pass Criteria: Item visible after reset
Objective: Verify calibration wizard completes
Steps:
- Complete first-run setup
- Observe calibration start
- Answer 10 questions
- Verify results shown
- Choose to continue (or not)
Expected Result: Calibration completes with level estimate
Pass Criteria: Level estimate displayed
Objective: Verify both passive and active questions
Steps:
- Run calibration
- Answer questions
- Observe question types
Expected Result: Mix of passive and active formats
Pass Criteria: Both types present
Objective: Verify 10 questions per round
Steps:
- Start calibration
- Count questions in first round
Expected Result: Exactly 10 questions
Pass Criteria: 10 questions shown
Objective: Verify user choice after round
Steps:
- Complete first 10
- Verify prompt to continue
- Choose continue
- Verify more questions
- Return, choose stop
- Verify calibration ends
Expected Result: User controls continuation
Pass Criteria: Both continue and stop work
Objective: Verify calibration can be paused and resumed
Steps:
- Start calibration
- Answer 5 questions
- Close browser
- Reopen, return to calibration
- Verify resume prompt
Expected Result: Calibration resumes from checkpoint
Pass Criteria: Progress retained
Objective: Verify language configuration saves
Steps:
- Open options
- Set native language
- Set target language
- Save and reload
- Verify settings persist
Expected Result: Languages saved correctly
Pass Criteria: Settings persist after reload
Objective: Verify API keys save and mask
Steps:
- Enter API key
- Verify masked in UI
- Reload options
- Verify key persists (masked)
Expected Result: Key saved, masked display
Pass Criteria: Key works, not visible in plain text
Objective: Verify model per-task selection
Steps:
- Configure different models for:
- Classification (fast)
- Explanation (smart)
- Use extension
- Verify correct model used per task
Expected Result: Task-specific models used
Pass Criteria: Models apply to correct tasks
Objective: Verify intensity slider works
Test Values: 1%, 5%, 10%, 20%
Steps:
- Set intensity to value
- Navigate to test page
- Count visual cues
- Compare to expected percentage
Expected Result: Cues match configured intensity
Pass Criteria: Within 20% of configured value
Objective: Verify recall probability works
Test Values: 0%, 25%, 50%, 75%, 100%
Steps:
- Set recall intensity
- Visit pages with resolved items
- Count reappearance rate
Expected Result: Resolved items reappear at configured rate
Pass Criteria: Within 30% of configured probability
Objective: Verify gamification can be disabled
Steps:
- Enable all gamification
- Answer correctly, observe feedback
- Disable positive feedback
- Answer correctly, verify no positive feedback
- Disable negative feedback
- Answer incorrectly, verify no feedback
Expected Result: Gamification toggles work independently
Pass Criteria: Each toggle affects only its feedback type
Objective: Verify blacklist excludes sites
Steps:
- Visit site A (add to blacklist)
- Navigate to site A
- Verify no cues
- Navigate to site B
- Verify cues appear
Expected Result: Blacklisted site has no cues
Pass Criteria: Blacklist overrides normal operation
Objective: Verify whitelist includes only specified sites
Steps:
- Switch to whitelist mode
- Add site A to whitelist
- Visit site A (verify cues)
- Visit site B (verify no cues)
Expected Result: Only whitelisted sites have cues
Pass Criteria: Whitelist mode restricts to specified sites
Objective: Verify toolbar popup site management
Steps:
- Visit site
- Open toolbar popup
- Click "Add to blacklist"
- Verify added message
- Refresh, verify no cues
- Click "Remove from blacklist"
- Verify cues return
Expected Result: Quick add/remove works
Pass Criteria: Both add and remove function correctly
Objective: Verify data survives browser restart
Steps:
- Answer several questions
- Close browser completely
- Reopen browser
- Verify history persists
Expected Result: All history retained
Pass Criteria: Full history available after restart
Objective: Verify export produces valid data
Steps:
- Generate learning data
- Click Export
- Save file
- Validate JSON format
Expected Result: Valid JSON with all data
Pass Criteria: File readable, contains expected fields
Objective: Verify vocabulary export separately
Steps:
- Learn several items
- Export vocabulary list
- Verify format
Expected Result: Vocabulary in usable format (CSV/JSON)
Pass Criteria: File contains learned items
Objective: Verify data can be cleared
Steps:
- Generate data
- Click Clear All Data
- Confirm
- Verify no data remains
Expected Result: All data cleared
Pass Criteria: History, vocabulary, settings reset
Objective: Verify graceful offline handling
Steps:
- Enable extension
- Disconnect network
- Navigate to page
- Observe behavior
Expected Result: Visual cues disabled, status shows offline
Pass Criteria: No errors, clear offline indicator
Objective: Verify extension resumes when online
Steps:
- With extension disabled (offline)
- Reconnect network
- Verify automatic recovery
Expected Result: Cues re-enable automatically
Pass Criteria: Normal function resumes
Objective: Verify quota exhaustion handled gracefully
Steps:
- Configure provider with low quota
- Exhaust quota
- Observe behavior
Expected Result: Clear message, disable until next session
Pass Criteria: User informed, no errors shown
Objective: Verify API errors don't crash extension
Steps:
- Configure invalid API key
- Use extension
- Observe error handling
Expected Result: Graceful fallback, no crash
Pass Criteria: Page readable, error logged
Objective: Verify TTS plays correctly
Steps:
- Enable pronunciation
- Hover over item
- Click play button
- Verify audio plays
Expected Result: Audio pronunciation audible
Pass Criteria: Sound plays for correct word
Objective: Verify audio is cached
Steps:
- Play pronunciation for word
- Note first load time
- Play same word again
- Note second load time
Expected Result: Second load faster (cached)
Pass Criteria: Second load <50% of first
Objective: Verify fast activation
Steps:
- Navigate to page
- Measure time until cues appear
- Repeat 10 times
Expected Result: Activation <100ms average
Pass Criteria: Mean <100ms
Objective: Verify popup appears quickly
Steps:
- Hover over cued item
- Measure time to popup visible
Expected Result: <200ms
Pass Criteria: Mean <200ms
Objective: Verify extension doesn't block page
Steps:
- Measure page load time without extension
- Measure with extension enabled
- Compare times
Expected Result: <5% increase
Pass Criteria: No significant blocking
Objective: Verify keys not in localStorage
Steps:
- Enter API key
- Check chrome.localStorage
- Check window.localStorage
Expected Result: Keys only in chrome.storage
Pass Criteria: No keys in localStorage
Objective: Verify sensitive inputs never processed
Steps:
- Create page with password field
- Ensure password text exists nearby
- Run extension
- Verify password not in any output
Expected Result: Passwords never processed
Pass Criteria: Sensitive data excluded
| Trigger | Scope |
|---|---|
| Every commit | Unit tests |
| Daily build | Integration tests |
| Weekly | Full system suite |
| Pre-release | Complete test suite |
A subset of critical tests run on every build:
| Test ID | Description | Priority |
|---|---|---|
| TC-001 | Installation | Critical |
| TC-012 | Visual cues appear | Critical |
| TC-014 | Popup display | Critical |
| TC-016 | Answer feedback | Critical |
| TC-070 | Offline mode | High |
| TC-060 | Data persistence | High |
| Level | Description | Response Time |
|---|---|---|
| Critical | Extension doesn't load, crashes | 24 hours |
| High | Core feature broken | 48 hours |
| Medium | Feature works but has issues | 1 week |
| Low | Cosmetic, minor issue | 2 weeks |
- Defect ID
- Summary
- Steps to Reproduce
- Expected Result
- Actual Result
- Severity
- Priority
- Environment
- Screenshots/Logs
| Deliverable | Description |
|---|---|
| Test Plan | This document |
| Test Cases | Detailed test case specifications |
| Test Data | Required test data sets |
| Test Reports | Execution results |
| Defect Reports | Found issues documentation |
- All critical tests pass (100%)
- All high priority tests pass (>95%)
- No critical or high severity open defects
- Performance benchmarks met
- Security scan passed
Release requires:
- Test lead sign-off
- All critical defects resolved
- Performance metrics within thresholds
- Security review passed
Language Learning corpora:
- OpenSubtitles
- Wikipedia dumps
- Common Voice
Vocabulary lists:
- CEFR word lists (A1-C2)
- Frequency dictionaries
- Idiom collections
| Provider | Test Account | Notes |
|---|---|---|
| OpenAI | Test API key | Rate limited |
| Anthropic | Test API key | Rate limited |
| Azure | Test subscription | Limited credits |
Document Version History
| Version | Date | Changes |
|---|---|---|
| 1.0 | 2026-03-10 | Initial test plan |