eeschema copy/paste fix: wx UTF-8 text dataobj (c1f1477) + regression specs

Cmd+C/Cmd+V in the wasm eeschema pasted a stray "(" SCH_TEXT — the stroke
font renders it as a small blue arc — instead of the copied symbol, and any
copy reached navigator.clipboard as a single character. Root cause and fix
live in wxwidgets (90bbad29822: UTF-8 wxDF_UNICODETEXT + the port's missing
GetAllFormats key function; c1f14775ba3: empty-read cache fallback + no
browser pre-clear on copy). This bump carries them plus the guards:

- tests/kicad/eeschema-copy-paste.spec.ts: chromium asserts the full
  multi-form (lib_symbols …)(symbol …) blob reaches navigator.clipboard;
  both engines assert copy → paste → save yields a second symbol and no
  stray (text …) item (firefox exercises the m_textCache fallback path).
  The kicad-chromium project now grants clipboard-read/write. NB the kicad
  projects' device UAs claim Windows, so specs must send plain Control+…
  — ControlOrMeta resolves to Meta on a mac host, which the "Windows" app
  ignores, and the bare key fires eeschema hotkeys instead.
- tests/e2e/textdataobj.spec.ts + Makefile.wasm target `textdataobj`:
  drives the wx-repo harness app (wxwidgets/tests/wasm/textdataobj_test.cpp)
  and asserts the SUITE-DONE failure counters plus the full-string browser
  round-trip, sentinel-seeded so a failed write cannot read as stale success.
- tests/e2e/clipboard.spec.ts: the Copy test now asserts the full input
  text reaches the clipboard (previously truncated to "S").

Verified locally: all specs red on the old wx, green after; wx-chromium
320/320, kicad-chromium 121/121 (collab specs env-gated).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Istvan Matejcsok 2026-08-26 11:21:00 +02:00
commit 6034a0550d
6 changed files with 324 additions and 2 deletions

View file

@ -170,6 +170,7 @@ all: minimal_test.html \
$(S)/scrollbar/scrollbar_test.html \
$(S)/notebook/notebook_test.html \
$(S)/clipboard/clipboard_test.html \
$(S)/textdataobj/textdataobj_test.html \
$(S)/filedialog/filedialog_test.html \
$(S)/layout/layout_test.html \
$(S)/aui/aui_test.html \
@ -321,6 +322,18 @@ $(S)/clipboard/clipboard_test.o: $(S)/clipboard/clipboard_test.cpp
$(S)/clipboard/clipboard_test.html: $(S)/clipboard/clipboard_test.o $(WX_CORE_LIB) $(JS_FILES)
$(CXX) $< $(LDFLAGS_NOGL) --pre-js $(JS) --shell-file $(HTML) -o $@
# wxTextDataObject encoding test (no GL). The source lives in the wxWidgets
# repo — the regression under test is a wx bug (wxNEEDS_UTF8_FOR_TEXT_DATAOBJ
# on the wasm port), so the test case travels with it.
WX_TESTS_WASM_DIR = ../../wxwidgets/tests/wasm
$(S)/textdataobj/textdataobj_test.o: $(WX_TESTS_WASM_DIR)/textdataobj_test.cpp
@mkdir -p $(@D)
$(CXX) -c $(CXXFLAGS) $< -o $@
$(S)/textdataobj/textdataobj_test.html: $(S)/textdataobj/textdataobj_test.o $(WX_CORE_LIB) $(JS_FILES)
$(CXX) $< $(LDFLAGS_NOGL) --pre-js $(JS) --shell-file $(HTML) -o $@
# FileDialog test (no GL)
$(S)/filedialog/filedialog_test.o: $(S)/filedialog/filedialog_test.cpp
$(CXX) -c $(CXXFLAGS) $< -o $@
@ -776,6 +789,7 @@ contextmenu: $(S)/contextmenu/contextmenu_test.html
scrollbar: $(S)/scrollbar/scrollbar_test.html
notebook: $(S)/notebook/notebook_test.html
clipboard: $(S)/clipboard/clipboard_test.html
textdataobj: $(S)/textdataobj/textdataobj_test.html
filedialog: $(S)/filedialog/filedialog_test.html
layout: $(S)/layout/layout_test.html
aui: $(S)/aui/aui_test.html
@ -850,7 +864,7 @@ clean:
rm -f $(S)/*/*_test*.html $(S)/*/*_test*.js $(S)/*/*_test*.wasm
rm -f $(S)/*/*_repro*.html $(S)/*/*_repro*.js $(S)/*/*_repro*.wasm
.PHONY: all clean menu contextmenu scrollbar clipboard filedialog layout aui toolbar grid dialog timer tree dataview htmlwin stc print dnd propgrid pickers collapsible listctrl infobar dataviewvirtual auinotebook wizard gridedit calendar gridrenderers printpreview bitmapbuttons specialized validators ownerdrawn popup xml wasmedge fontenum textdecor bitmask regions maximize earlysize selectheight uipolish threadpool logerror retinascale coroutine coroutine-nested asyncify-races notebook radiogroups collapse-relayout
.PHONY: all clean menu contextmenu scrollbar clipboard textdataobj filedialog layout aui toolbar grid dialog timer tree dataview htmlwin stc print dnd propgrid pickers collapsible listctrl infobar dataviewvirtual auinotebook wizard gridedit calendar gridrenderers printpreview bitmapbuttons specialized validators ownerdrawn popup xml wasmedge fontenum textdecor bitmask regions maximize earlysize selectheight uipolish threadpool logerror retinascale coroutine coroutine-nested asyncify-races notebook radiogroups collapse-relayout
# === Coroutine pthread variant — historically reproduced the KiCad coroutine x pthreads crash ===
# Same modal-free harness as `coroutine`, but compiled/linked with pthreads to match