- Extract common logging code to tests/e2e/utils/ - fixtures.ts: Playwright fixture with automatic log capture - test-utils.ts: Logging utilities and helper functions - Each test now automatically captures: - Console logs with timestamps and log levels - Page errors with full stack traces - Log files written per test to tests/logs/ - <test-name>.log for all console output - <test-name>.errors.log only when errors occur - Update all 13 spec files to use shared fixtures - Update README with test structure and logging docs - Net reduction of ~700 lines by removing duplicated code 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
3.7 KiB
3.7 KiB
KiCad WASM Tests
Playwright tests for verifying the wxWidgets WASM port.
Prerequisites
- Node.js 18+
- Emscripten SDK (for building)
Building the Test App
../scripts/build-wasm-test.sh
This builds wasm-app/minimal_test.{html,js,wasm} and standalone test apps.
Running Tests
npm install
npm test
To run specific tests:
npx playwright test menu.spec.ts # Run menu tests only
npx playwright test --grep "wxTimer" # Run tests matching pattern
Test Structure
tests/
├── e2e/ # Playwright test specs
│ ├── utils/ # Shared test utilities
│ │ ├── fixtures.ts # Playwright fixtures with auto-logging
│ │ └── test-utils.ts # Logging and helper functions
│ ├── menu.spec.ts # wxMenuBar tests
│ ├── timer.spec.ts # wxTimer tests
│ ├── dialog.spec.ts # wxDialog/wxMessageBox tests
│ ├── tree.spec.ts # wxTreeCtrl tests
│ ├── grid.spec.ts # wxGrid/wxSpinCtrl/wxSearchCtrl tests
│ ├── opengl.spec.ts # OpenGL tab tests
│ ├── wxwidgets.spec.ts # Comprehensive UI interaction tests
│ └── ...
├── logs/ # Test logs (auto-generated)
├── test-results/ # Screenshots (auto-generated)
├── baseline-screenshots/ # Reference screenshots for comparison
├── wasm-app/ # Built WASM test applications
│ ├── minimal_test.html # Main test app
│ └── standalone/ # Individual component test apps
└── playwright.config.ts # Playwright configuration
Logging
Each test automatically captures:
- Console logs with timestamps and log levels
- Page errors with full stack traces
Log files are written to logs/ after each test:
<test-name>.log- All console output<test-name>.errors.log- Errors only (created if errors occurred)
Example log format:
[2025-11-29T19:39:42.165Z] [LOG] [EVENT] Application started
[2025-11-29T19:39:42.733Z] [WARNING] GPU stall due to ReadPixels
[2025-11-29T19:39:42.801Z] [ERROR] Some error message
Screenshots
Tests capture screenshots to test-results/. Compare against baselines:
../scripts/compare-screenshots.sh
Viewing the App Directly
Start a local server in the wasm-app directory:
cd wasm-app
npx serve .
Then open http://localhost:3000/minimal_test.html in your browser.
Alternative using Python:
cd wasm-app
python3 -m http.server 8000
Then open http://localhost:8000/minimal_test.html
Test Categories
| Spec File | Tests | Description |
|---|---|---|
wxwidgets.spec.ts |
Comprehensive | Full UI interaction, stability, OpenGL |
menu.spec.ts |
wxMenuBar | Menu bar visibility and interactions |
timer.spec.ts |
wxTimer | Timer start/stop/reset functionality |
dialog.spec.ts |
wxDialog | Message boxes and custom dialogs |
tree.spec.ts |
wxTreeCtrl | Tree control with expand/collapse |
grid.spec.ts |
wxGrid | Grid, SpinCtrl, SearchCtrl |
opengl.spec.ts |
OpenGL | GL tests (immediate mode, vertex arrays) |
aui.spec.ts |
wxAuiManager | Dockable panels |
clipboard.spec.ts |
wxClipboard | Copy/paste operations |
filedialog.spec.ts |
wxFileDialog | File open/save dialogs |
layout.spec.ts |
wxSplitter | Splitter and scrolled windows |
toolbar.spec.ts |
wxToolBar | Toolbar buttons and status bar |
Known Issues
- Timer tests: May fail due to timing sensitivity
- Tree tests: Button click positions may vary
- wxGrid: Not fully implemented (expected failures marked with
test.fail)