Commit graph pcbjam/tests/baseline-screenshots
Author SHA1 Message Date
Viktor Vaczi
ba59fb4edb screenshots: promote CI run 29693107751 baselines — timestamp-free Event Log
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 17:57:48 +02:00
Viktor Vaczi
0e93a2a3df screenshots: promote CI run 29690403318 baselines
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 17:16:58 +02:00
Viktor Vaczi
0f32bfbd37 screenshots: promote CI run 29573746695 baselines
20 updated (17 chromium — SwiftShader→ANGLE render drift; firefox
web-eeschema was a stale Loading-splash capture), 10 added
(project-sync-00..03 + web-switch-missing-pcb-created, both engines).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rb9jsqtHsC3tHTaJ45244j
2026-07-17 14:38:02 +02:00
Viktor Vaczi
63ed1f3c1f e2e/CI: dual-engine suites, per-engine screenshots, SwiftShader retired, prod web suite, CI-coverage gate
Squash of experiment/ff-big-modules vs main.

Big-module routing removed: native-EH shrank kicad_editor below
SpiderMonkey's x86-64 code budget (runs 29355049705/29356152413 green on
stock Firefox), so BIG_MODULE_SPECS routing and the baseline-only-JIT
crutch are gone — kicad-firefox and kicad-chromium both run the full
suite, with the module compiled the way real users' browsers compile it.

Per-engine screenshots end to end: stableShot/shotPath write
test-results/<engine>/<name>.png; baselines move to
baseline-screenshots/{chromium,firefox}/ and the whole tools/screenshots
pipeline (compare/promote/manifest/spec-map/changelog/Discord) keys on
<engine>/<name>. Previously Firefox and Chromium renders of one spec
overwrote each other and Firefox renders were never actually gated.
Seeded from CI run 29421380806 (92 new firefox baselines, +24 chromium
web-suite shots); manifest generated from the baseline tree.

One merged playwright.config.ts (kicad/asyncify/coroutine/perf as
projects); ~25 dead npm scripts dropped. The web suite is gated in CI for
the first time ever (4 rotted specs fixed, 5 broken lib-bridge specs
triaged as fixme in docs/features/web-e2e-rot/); cheap lint step after
npm ci; last 26 blind-sleep violations fixed.

SwiftShader retired: CI Chromium renders WebGL on ANGLE → Mesa llvmpipe
(--use-gl=angle --use-angle=gl --ignore-gpu-blocklist; the blocklist flag
is mandatory — llvmpipe is blocklisted and WebGL is silently unavailable
without it) in BOTH configs. Under WORKERS=4 congestion SwiftShader
transiently failed the first post-board-load draw and the recovery
cascade ended in a silent permanent Cairo fallback — that engine flip was
the "~1.2% changedRatio both directions" occ-export baseline flake.
Validated 160/160 across two 80-repeat rigs; full analysis in
docs/features/wx-parity-bugs/occ-export-context-eviction.md. Chromium
baselines shift slightly on llvmpipe — promote once from the first green
run. Deflakes the new coverage exposed: presence baselines settle before
capture; presence fixtures declare current file formats; perf gets its
own outputDir so CI evidence survives; occ-export settles the board paint
before the export dialog; menu-item waits (waitForRenderedByLabel before
clickMenuItem) in 4 specs + the TESTING.md rule.

Web suite runs the PROD build, in parallel: webServer becomes backend
`start` + the standalone's e2e:preview (build-preview.mjs: link-wasm →
stash the public/wasm symlink aside during vite build, build-demo.mjs's
move — then vite preview as the persistent server). The wasm middleware
serves /wasm/* in preview and emits COOP/COEP/CORP itself (a pthread
worker script's own response must carry COEP or Chrome kills it with
ERR_BLOCKED_BY_RESPONSE). VITE_* flags bake at build time;
VITE_ALLOW_USER_OVERRIDE joins turbo globalEnv. fullyParallel + default
workers: 5.2m → 1.4m. Determinism fixes the parallel run exposed:
shared-page specs become serial groups; locks.spec grabs alice's exact
item via the new kicadCollabTestSelectByUuid hook (cross-tab "first
footprint" order is not a ysync invariant); quit specs poll page.url()
(quit supersedes its own navigation — NS_BINDING_ABORTED on Firefox).
Suite: 51 passed / 12 skipped / 0 failed in 1.6m.

CI-coverage gate (lint:ci-coverage): every tests/**/*.spec.ts must be
reachable from the npm scripts the workflows invoke — scraped from
.github/workflows/, resolved through package.json, coverage asked from
playwright --list itself. Rules: uncovered-spec + orphan-project (with a
documented LOCAL_ONLY_PROJECTS allowlist). Gating next to
lint:determinism; 138 spec files / 13 projects accounted for.

Product fixes kept from the investigations (reachable on real GPUs too):
wx 7799fd1be5 — paint flags clear before dispatch + Invalidate always
propagates; kicad 3dcfea5e45 — SwiftShader pass-boundary flush +
per-instance font texture + first-frame GL-error drain (GAL recovery
recovers instead of falling back to Cairo) + the user-facing eeschema
switch navigates again under __EMSCRIPTEN__ (project-sync's
FaceRegistered gate had rerouted it into the hidden sync player; caught
by the newly-gated web suite).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018eUxiPApHgGiu9NFyQfhAq
2026-07-17 12:21:54 +02:00
Istvan Matejcsok
36ca706cf0 screenshots: promote CI run 29498053666 baselines
4 drift updates (eeschema-load-rendered, eeschema-url-regex,
load-pcb-pic_programmer, occ-export-done — wasm rebuild drift from the
kicad_tools/bindings commits) + 2 missing collapse-relayout baselines;
356 unchanged. Churn-free restage via screenshots:promote.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 14:50:02 +02:00
Viktor Vaczi
c1eb08108b test(screenshots): restore screenshot-neutrality after the determinism refactor
The determinism conversion silently dropped/renamed screenshots vs the committed
baselines, so CI flagged ~35 baselines as "removed". Restore them:

- pl_editor-*: re-add the "pl_editor-" prefix the conversion dropped (5).
- Buffer screenshots that lost their path: (eeschema draw-wires/loaded-css,
  pcbnew draw-lines/loaded-css, pcbnew-move, dark-mode, eeschema-crosshair,
  aui-resize) re-add path:'test-results/<name>' so they SAVE and still feed the
  in-test pixel-diff analysis (17).
- Dropped animating/loading captures re-added via stableShot / raw screenshot:
  timer-03/05/06, dialogs-timer-running/started, wxgrid-02/03, 01-loading (7).

Delete 5 obsolete wizard baselines (eeschema/gerbview/pl_editor/symbol_editor/
generic -wizard-00-initial): every app is now seeded to bypass the first-run
setup wizard (that was the point of removing the wizard for/if loop), so those
states are no longer produced — pl_editor.spec asserts "no wizard appears"
instead.

Net: every committed baseline has a producer again (0 "removed"); determinism
guard green; affected specs pass (e2e 40, kicad 12) and emit the restored PNGs.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BVX1pHMvRPYHdp6ZfEawrk
2026-07-07 11:35:39 +02:00
Istvan Matejcsok
c8580329e1 chore(screenshots): promote baselines from main run 28703177748
The three 3D-viewer shots changed because the specs now screenshot the
COMPLETED render (pixel-gated waitForThreeDRender) instead of a fixed-sleep
mid-render frame. The rest is the accumulated unpromoted backlog: eeschema/
symbol-editor drift, and first-ever baselines for the models-spec renders
(tail re-enabled in 561d050), frame-runtime, occ-export/probe and
xface-preferences from earlier merges.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-04 12:32:00 +02:00
Viktor Vaczi
3efcdcf91c fix(tests): enforce screenshot gate; drop shadow dir, flaky retinascale, 12 stale
Finalize the screenshot review system after the first Linux re-baseline
(that run showed 355/356 stable — the placeholder floor is fine as-is):

- ENFORCE the gate: `screenshots:check --fail-on-change` now fails the build on any
  changed/added/removed vs baselines (it still posts the drift report first, so the
  failure is actionable; a real render change → re-promote). The generic "CI failed"
  notice is suppressed for gate failures so we don't double-post on drift.
- Exclude retinascale-01-loaded: a fullPage HiDPI test whose captured height + DPR
  scaling vary run-to-run (~60% inter-run diff) — a flaky test, not render noise.
  IGNORE_SCREENSHOTS in config.ts; compare/promote/gen-manifest skip it; baseline removed.
- Kill the baseline-dir shadowing: drop e2e/baseline-screenshots/ from BASELINE_DIRS +
  delete its 3 files (grid-tab-final, wxgrid-controls, wxgrid-dedicated-page) that
  duplicated names in baseline-screenshots/ with different bytes.
- Prune 12 stale baselines (renamed/removed specs: wizard-01..04, gerbview-wizard-01..04,
  zoom-pl_editor-*, popup-03-palette).
- Delete the dead compare-screenshots.sh / update-baseline-screenshots.sh.
- Regenerate screenshot-manifest.json (355 entries).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 11:30:33 +02:00
Viktor Vaczi
616bbbf67c test(screenshots): adopt Linux CI baselines (first re-baseline)
Promote the first green CI run built with the outputDir fix (b270507, run
28572705121) — the run that keeps test-results across the sequential suites.
Overwrites the Mac-rendered baselines with CI's Linux render (churn-free,
verbatim bytes):

- 335 updated  — Mac->Linux font/AA rendering (expected, not regressions)
- 14 added     — new specs (modal, notebook, pcbnew-move, 3d-viewer, dark-mode, ...)
- 7 unchanged  — blank/loading screens identical across platforms

Renders eyeballed (pcbnew / eeschema / wx controls) — all correct UI. From here
the baselines are the Linux source of truth; the next run compares Linux-vs-Linux.

12 stale baselines (renamed specs, e.g. wizard-01 -> wizard-01-loaded) are left in
place pending confirmation — prune separately.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 10:44:40 +02:00
Istvan Matejcsok
13cac06778 fix(wasm): radio groups no longer merge into one
Bump wxwidgets to the %p->%zu radio-group name fix and add a standalone
wxWidgets harness plus an e2e regression that asserts three radio groups
in one window select independently. Build artifacts are gitignored; only
radiogroups_test.cpp is tracked.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-29 12:54:35 +02:00
Istvan Matejcsok
a4dd0eaf3b fix: 🐛 wxWdigets popup position 2026-06-23 14:32:38 +02:00
Istvan Matejcsok
cee569dc5d fix: 🐛 kicad aui resize
 Closes: #20
2026-06-22 08:49:22 +02:00
Istvan Matejcsok
5c6e426b00 fix: 🐛 hide print preview 2026-06-19 10:25:14 +02:00
Istvan Matejcsok
28615aba02 test: 💍 select height wxWidget 2026-06-15 18:41:18 +02:00
Viktor Vaczi
68430fa87c feat(wasm-dom): tests for context menus + scrollbars; fix clean wx build
- Standalone wx test apps (contextmenu, scrollbar) + e2e specs proving the
  wxScrollBar control, the wxScrolledWindow gutter, and DoPopupMenu.
- KiCad in-app specs: pl_editor + pcbnew canvas right-click context menus and
  scrolled-panel scrollbar gutters, with baseline screenshots.
- build-wx-wasm.sh: serial -j1 fallback when the parallel build trips the
  intermittent clean-build race (a generated header read mid-rewrite by
  concurrent compiles; never happens at -j1). Recovery resumes from built
  objects; a genuine error still fails the serial pass.
- Bump wxwidgets submodule (context menus + draggable scrollbars).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 23:15:49 +02:00
Viktor Vaczi
b58ae49d6e fix(wasm): non-suspending clipboard predicate; kicad baselines for the DOM port
- wxwidgets -> 25281178d2: wxClipboard::IsSupported answered via a 2 s
  Asyncify suspend on KiCad's idle path; overlapping suspensions
  corrupted Asyncify.currData ('indirect call to null'/'signature
  mismatch' storms after every document load — bug 2 of features/async).
  It now answers synchronously. The storms and 2 s UI stalls are gone.
- 58 kicad screenshot baselines regenerated from the green run (the old
  set was canvas-only and died with the canvas port).
- visual-notes: bug 29 + the known-red list — the 10 file-loading kicad
  specs (load-pcb, collab bridges, eeschema-ui keyboard/dialog) remain
  red on the unfixed asyncify substrate (bug 3, per-context currData
  authority). Bisect-verified pre-existing: binaries built from the
  pre-consolidation wx tree fault identically. Greening them is the
  async feature's exit criterion, deliberately out of scope here.

Gates: wx e2e 292/0/1 skipped; kicad 32 passed / 10 known-red / 2
skipped (parity +1 with pre-consolidation, minus the timeout storms).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 20:19:48 +02:00
Viktor Vaczi
324217872a test: refresh wx baselines after the notebook geometry fix
One-time refresh from a fully green run (292/0/1): the client-origin
projection fix moved every notebook's tab strip to its true position
(content shifted by the strip height), and many baselines predated the
DOM-native notebook entirely. 10 new screenshots (gal/menu/spinctrl
flows that previously never ran green), 159 updated, 100 untouched.
compare-screenshots.sh is clean against the gate run.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 20:19:48 +02:00
Viktor Vaczi
cd668efe8c test: promote the DOM baselines — single screenshot baseline set
Pure file moves: the canvas baseline set (331 PNGs) is deleted, the DOM
set becomes tests/baseline-screenshots/, and the DOM pcbnew reference
image becomes wizard-04-finish-headless.png. 73 kicad-flow baselines
existed only on the canvas side; they are regenerated from a green DOM
run in a follow-up commit.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 20:19:48 +02:00
Viktor Vaczi
d7159b42c0 "fixed" kicad tests, added baseline screenshots. 2026-06-10 17:37:58 +02:00
Viktor Vaczi
7629ab978d test(e2e): fix wx suite — header deps, port pinning, drop legacy-GL tests, wx+pthread worker fix
Suite went 64 failed → 291 passed / 0 failed:
- Makefile.wasm: compile with -MMD -MP and include .d files — stale objects
  relinked against a newer wx lib crashed apps at startup with "function
  signature mismatch" after any header/vtable change
- playwright(.coroutine).config.ts: pin the server port for the whole run
  (resolvePort from playwright-kicad.config.ts); the 60s freshness window made
  workers restarted after a failure rotate to a dead port (ERR_CONNECTION_REFUSED
  cascade across ~50 tests)
- drop legacy-GL testing: KiCad renders via WebGL GAL (gal-webgl.spec.ts);
  remove minimal_test's OpenGL tab/GLTestCanvas, opengl.spec.ts, GL z-order
  describes, -sLEGACY_GL_EMULATION + gl_immediate_shim.js from the test build,
  and the orphaned GL baselines
- coroutine-pthread repro apps join the `all` target (make clean used to delete
  them while all never rebuilt them); clean no longer eats checked-in JS like
  worker_dom_stub.js
- bump wxwidgets: guard module-eval document access so wx+pthread apps
  (threadpool tests) survive Web Worker eval

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-10 13:40:00 +02:00
Balint Ipkovich
4467bcd2c4 feat: gerbview WASM port 2026-06-03 14:23:57 +02:00
Balint Ipkovich
e28f473040 feat: symbol_editor WASM port 2026-06-02 13:37:26 +02:00
Balint Ipkovich
8fd78d42b2 test(pl_editor): commit screenshot baseline + fix dialog screenshot timing
Adds a 600ms wait between the wxFileDialog appearing in the registry and
the screenshot in tests/kicad/pl_editor.spec.ts. Without it, the dialog
object exists but its MEMFS readdir (asyncified) hasn't returned yet, so
the screenshot caught a half-painted black rectangle — fine for the
registry-based assertion but useless as a pixel baseline.

Commits the 10 pl_editor screenshots produced by the spec as the baseline
reference under tests/baseline-screenshots/.

Bumps the wxwidgets submodule pointer to pick up the expanded comment on
the wxGenericFileDialog::OnOk fix (explains why the patch lives in the
generic dialog instead of src/wasm/ — OnOk is the join point for both the
OK button and <Enter> via the dialog's compile-time event table, so
subclassing in wasm/ wouldn't intercept either).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-01 13:50:40 +02:00
Viktor Vaczi
31ff88ee9e tests: load-pcb e2e for microwave + pic_programmer demos
Adds an end-to-end test that drives File→Open in pcbnew, injects
the .kicad_pcb and .kicad_pro files into MEMFS at the dialog's
default starting directory, drives the menu + filename text input
+ Enter accept path, and screenshots the loaded board. Parametrized
for both kicad/demos/microwave (RF polygon footprints) and
kicad/demos/pic_programmer (full multi-IC layout).

Without the rtree fix bumped in via the kicad submodule, the load
would abort on every PCB at rtree.h:1771 Classify; the test asserts
no [RTREE-DIAG] line and no Aborted(. The post-load clipboard
RuntimeError in __asyncjs__js_clipboardHasText is a separate,
pre-existing wasm-port limitation that we explicitly do not regress
on here.

- tests/kicad/load-pcb.spec.ts: serial-mode parametrized spec
- tests/kicad/load-pcb-probe.spec.ts: one-shot diagnostic probe
  for inspecting wxFileDialog state on the canvas
- tests/kicad/utils/fs-inject.ts: FS.writeFile bridge from Node fs
- tests/kicad/utils/board-ready.ts: poll-for-no-dialogs readiness
- tests/baseline-screenshots/load-pcb-*.png: 6 baselines covering
  both demos at pcbnew-ready / dialog-open / loaded states
- features/.../rtree-debug-findings.md: full diagnosis trail with
  an upstream-reportable summary the maintainer can lift verbatim
- kicad submodule bumped to 07d8130d44 (shape_poly_set rtree fix)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-29 09:51:18 +02:00
Viktor Vaczi
6771e7de74 Fix Asyncify and improve build process
Build system improvements:
- Add wasm-opt stub for Docker build to bypass asyncify in container
- Add apply-asyncify.sh script for host-side asyncify transformation
- Update build-pcbnew.sh to install wasm-opt stub and add EXPORTED_RUNTIME_METHODS
- Add --with-zlib=sys to wxWidgets configure for proper zlib linking
- Improve update-baseline-screenshots.sh to only copy new/significantly changed files

wxWidgets submodule update:
- Fix EM_JS to EM_ASYNC_JS for proper Asyncify registration

Test updates:
- Add new baseline screenshots for bitmapbuttons, dnd, gridrenderers, printpreview, specialized tests
- Add kicad-pcbnew initial screenshot
- Fix wxgrid-controls.png and wxgrid-dedicated-page.png (were showing errors)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-14 11:59:50 +01:00
Viktor Vaczi
756feb35da Add WASM feature tests: font enum, text decor, bitmap mask, regions
New test apps and E2E tests:
- fontenum: Font enumeration via Local Font Access API (180 fonts)
- textdecor: Text underline/strikethrough decorations
- bitmask: wxMask bitmap transparency with color keys
- regions: Non-rectangular region clipping (union, subtract, complex shapes)

Updates:
- playwright.config.ts: Add local-fonts permission
- WHATWORKS.md: Document implemented features, update test counts
- Makefile.wasm: Add build targets for new test apps

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-04 11:06:33 +01:00
Viktor Vaczi
7448d3cd74 Remove wxGraphicsContext test (not needed for KiCad WASM)
KiCad uses OpenGL GAL directly via WebGL, completely bypassing
wxGraphicsContext. The graphicsctx test app was crashing because
GetDefaultRenderer() returns NULL when wxUSE_CAIRO=0.

Since KiCad's rendering doesn't use wxGraphicsContext, this test
is unnecessary. Updated WHATWORKS.md to document this finding.

Test count: 246 -> 240 (34 apps)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-04 08:52:37 +01:00
Viktor Vaczi
f71136b50a Add Phase 3 test coverage: validators, ownerdrawn, popup, graphicsctx, xml, wasmedge
New test apps:
- validators: wxTextValidator, wxIntegerValidator, wxFloatingPointValidator, custom validators
- ownerdrawn: wxOwnerDrawnComboBox for custom dropdown rendering (layer/font/icon combos)
- popup: wxPopupTransientWindow for transient popups (status, palette, color picker)
- graphicsctx: wxGraphicsContext for vector graphics (partial WASM support)
- xml: wxXmlDocument for XML parsing (used 665 times in KiCad)
- wasmedge: WASM edge cases (file system, threading, fonts, clipboard, memory)

Updates:
- 35 test apps, 246 tests passing (~99% coverage)
- Document WASM limitations and future TODOs in WHATWORKS.md
- Add baseline screenshots for all new tests

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 18:54:40 +01:00
Viktor Vaczi
8f890658d2 Complete remaining wxWidgets feature tests: DataViewVirtual, AuiNotebook, Wizard, GridEdit, Calendar
Implements and tests all remaining KiCad-critical wxWidgets features:
- wxDataViewCtrl virtual mode for Zone Manager/Net Inspector (10,000+ items)
- wxAuiNotebook for closeable/reorderable tabbed panels
- wxWizard for step-by-step Footprint Wizard dialogs
- wxGrid cell editing with text, number, choice, checkbox editors
- wxCalendarCtrl for date selection with navigation

Total: 184 tests passing across 25 standalone apps (~95% KiCad coverage)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 17:16:14 +01:00
Viktor Vaczi
e8536a9a6d Add 5 new wxWidgets feature tests: PropertyGrid, Pickers, Collapsible, ListCtrl, InfoBar
Implements and tests remaining KiCad-critical wxWidgets features:
- wxPropertyGrid/wxPropertyGridManager for property panels
- wxColourPickerCtrl/wxFontPickerCtrl for color and font selection
- wxCollapsiblePane for expandable UI sections
- wxListCtrl virtual mode for large lists (10,000+ items)
- wxInfoBar for notification messages

Total: 159 tests passing across 20 standalone apps (~90% KiCad coverage)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 16:57:02 +01:00
Viktor Vaczi
bf933104f9 Add wxPrinting test app and verify printing infrastructure works
- Create print_test standalone app testing wxPrintout, wxPrintPreview,
  wxPrinter, and browser print via window.print()
- Add 8 E2E tests for printing functionality (all pass)
- Update WHATWORKS.md: printing now works, 127 total tests, 14 standalone apps
- Remove wxRichTextCtrl from untested (disabled, KiCad doesn't use it)

Key findings:
- Printing infrastructure works out of the box in WASM
- wxPrintout callbacks fire correctly (OnBeginPrinting, OnPrintPage, etc.)
- wxPrintPreview renders preview frame
- Browser Print triggers native print dialog via window.print()

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 15:51:44 +01:00
Viktor Vaczi
9a78db1528 Add wxDataViewCtrl, wxHtmlWindow, and wxStyledTextCtrl test apps
Test 3 previously untested KiCad-critical wxWidgets controls:
- wxDataViewCtrl: List/tree views for Zone Manager, Net Inspector (10 tests)
- wxHtmlWindow: HTML rendering for About dialogs, error formatting (8 tests)
- wxStyledTextCtrl: Syntax highlighting for DRC rules, Python console (10 tests)

Also add button-finder config and update docs. All 119 tests passing.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 11:27:00 +01:00
Viktor Vaczi
802b1e871c Implement wxClipboard and add button finder utility for canvas testing
wxClipboard:
- Update wxwidgets submodule with full wxClipboard implementation
- Add clipboard async functions to ASYNCIFY_IMPORTS in Makefile.wasm
- Update clipboard tests with correct button positions
- Add clipboard permissions to playwright config
- Update WHATWORKS.md to mark wxClipboard as working

Button Finder Utility:
- Add parametric button-finder.spec.ts for scanning canvas apps
- Utility scans for clickable buttons by detecting console log responses
- Excluded from regular test runs via testIgnore
- Supports APP_URL, START_Y, END_Y, STEP environment variables
- Document usage in tests/README.md

All 91 tests pass.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 10:19:50 +01:00
Viktor Vaczi
90613dbe49 Fix wxTreeCtrl test crash and update test coordinates
- Add null guard in TreeTestFrame::LogEvent() to prevent crash when
  events fire before m_log is initialized during tree population
- Update button click coordinates in tree.spec.ts for Add Item and
  Delete Selected buttons
- Update WHATWORKS.md to reflect wxTreeCtrl now fully working (7/7 tests)
- Update baseline screenshots for tree tests

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 22:28:30 +01:00
Viktor Vaczi
5561c7c9f2 Fix timer tests and add baseline screenshot update script
- Fix timer.spec.ts button click coordinates (slow: y=125, fast: y=265, reset: y=390)
- Add scripts/update-baseline-screenshots.sh for updating baselines
- Update all baseline screenshots

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 21:20:40 +01:00
Viktor Vaczi
961455ef54 Add baseline screenshots and visual regression testing
Add infrastructure for visual regression testing of wxWidgets WASM rendering:

- Add 121 baseline screenshots capturing all UI states tested by Playwright
- Add scripts/compare-screenshots.sh to compare test results vs baseline
- Update tests/WHATWORKS.md with documentation on screenshot comparison
- Update wxwidgets submodule with dialog refactoring

The baseline screenshots cover:
- Main app tabs (Controls, Text Input, Drawing, Lists, OpenGL, Grid, Dialogs)
- Standalone test apps (menu, toolbar, layout, aui, clipboard, filedialog, etc.)
- Dialog/MessageBox rendering (info, yes/no, error, custom dialogs)
- OpenGL rendering tests (immediate mode, vertex arrays, matrix ops)
- UI interactions (dropdowns, tab switching, z-ordering)

Use ./scripts/compare-screenshots.sh to check for visual regressions.
Small byte differences (<2%) are typically timestamps, not visual changes.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 19:55:12 +01:00