![]() |
undoStudio
The IDE of the undoRT ecosystem
|
Three suites, all headless: no GPU and no display. They create an ImGui context with a font atlas and drive real frames.
The Editor and Terminal suites need the project built first: they link against libundoStudioCore.so, libimgui.a and libimplot.a.
| Suite | |
|---|---|
| core | the state files, the recent projects and files lists, the open-file request between the core and an undoApp, the popup dismissal, and the shipped layout |
| Editor | the ST document, the completion lists and their placement, the semantic tokens, the diagnostics end to end, the tab bar, the dirty state, renames, the output filters, and the JSON routing |
| Terminal | the shell under a pty, and its tab bar |
The Editor suite links each test against one archive of the sources the tests share and reaches into the editor's internals with a #define private public. Two things worth knowing before adding a test:
PLUGIN_SRC in undoApps/undoApp.Editor/tests/Makefile, or every test that needs it fails to link — and the failure looks like a missing symbol rather than a missing entry in a listPURE, the set that skips the ImGui link line, or it fails at link time pointing at the archive rather than at the listA panel body draws contents only, because ImGuiManager owns the window. So a test that draws one has to Begin the panel itself:
tests/st_editor_frame.hpp is that Begin for the ST documentBegin/End-ed by handA body called bare trips ImGui's own "Calling End() too many times" assert, which points at the assert rather than at the Begin that is missing.
EndFrame the window is gone. And a widget found by its fill colour is not found while it is hovered, so the mouse is parked away before measuringContentSize is one frame behind.** A window publishes the size its content had during the previous frame. Read straight after changing a filter, the two directions measure equal, which reads as "the filter does nothing"SetText — a load uses that too. It has to click into the editor and then feed io.AddInputCharacter, and the click is also the only thing that focuses the editor's child windowEach one has found a real bug: a fuzzy match stealing the member completion, 1841 cells in 1920 painted the wrong colour, a key written above its own section header, a recent-files row that rendered in the right order in the right place with the right name on it and could not be picked because its ID belonged to another row.