- add reusable-buffer String::toUtf8() conversion
  - extract shared find-bar CSS into UIFindBarStyle
  - reuse the shared style from UIDocFindReplace

  ecode:
  - enable terminal find, next, and previous shortcuts
  - install terminal bindings after conflicting editor bindings are removed

  eterm:
  - add searchable terminal history with plain text, RegEx, and LuaPattern modes
  - support case-sensitive and whole-word matching across wrapped rows
  - debounce searches and avoid unnecessary string allocations
  - add an animated find bar with status and wrapped result navigation
  - expose find commands through configurable keybindings and the context menu
  - render and navigate search matches in terminal history
  - forward right-button releases when applications capture the mouse
  - fix UITabWidgetSplitter ownership during shutdown

  tests:
  - cover UTF-8 buffer reuse and terminal search behavior
  - verify wrapped lines, Unicode, pattern modes, invalid expressions, and navigation
  - verify SGR right-button release encoding

  tooling:
  - clarify the mandatory optimized build workflow for performance work
  - require direct release test execution before falling back to Xvfb
This commit is contained in:
Martín Lucas Golini
2026-09-10 00:57:56 -03:00
parent a294d78733
commit 95d52cdbb3
25 changed files with 1067 additions and 120 deletions

View File

@@ -17,6 +17,14 @@ This produces an optimized release build with debug symbols and without AddressS
release executable (for example, `bin/eepp-ui-html`) when measuring performance. Recheck
`.ecode/project_build.json` before use because the local configuration may change.
This workflow is mandatory for any task whose purpose includes performance investigation,
optimization, benchmarking, or validating runtime speed. Do not reuse a gmake tree generated with
`--address-sanitizer`, and do not substitute `make config=release`: regenerate with the current
`eepp-linux-ninja` command and build the `release` Ninja target exactly as configured above.
The debug/unit-test workflow below is additional correctness validation. It does not replace the
release Ninja build required for performance work.
## Debug and Unit-Test Builds
All build commands must be executed from the **root project directory**. Follow these steps to build the project:

View File

@@ -5,8 +5,20 @@ This project relies on a comprehensive suite of unit tests to prevent regression
## Running Tests
The test binary manages its own current working directory, so you can execute it from anywhere.
* **Prefer the release test binary during normal development:**
When AddressSanitizer or other debug-only diagnostics are not required, build and run `bin/unit_tests/eepp-unit_tests`. The optimized release suite is substantially faster and should be the default for iterative testing. Use `bin/unit_tests/eepp-unit_tests-debug` when investigating memory safety, assertions, or other behavior that specifically requires the debug configuration.
The required default workflow is:
1. Build the release unit-test target.
2. Run `bin/unit_tests/eepp-unit_tests` directly, without Xvfb.
3. If sandbox restrictions prevent access to the host display, retry that same direct command with
elevated permissions.
4. Use Xvfb only after direct execution has failed outside the sandbox because no usable graphical
display is available. Xvfb is the last fallback, not the default headless convenience path.
Do not infer that a session is headless merely because its first sandboxed command cannot connect to
the display. A sandbox can hide or deny access to an otherwise usable host display.
* **Use the release test binary during normal development:**
When AddressSanitizer or other debug-only diagnostics are not required, build and run `bin/unit_tests/eepp-unit_tests`. The optimized release suite is substantially faster and is the required default for iterative testing. Use `bin/unit_tests/eepp-unit_tests-debug` only when investigating memory safety, assertions, or other behavior that specifically requires the debug configuration.
* **Default Execution on a Graphical Linux Desktop:**
Unit-test windows are created hidden, so run the release suite directly against the desktop:
`bin/unit_tests/eepp-unit_tests`
@@ -16,7 +28,7 @@ The test binary manages its own current working directory, so you can execute it
* **Filtered Tests on a Graphical Linux Desktop:**
Use the same direct hardware-backed command for focused runs:
`bin/unit_tests/eepp-unit_tests --filter="FontRendering.*Offset*"`
* **Headless CI and Systems Without a Usable Desktop Display:**
* **Last Fallback for Headless CI and Systems Confirmed to Lack a Usable Desktop Display:**
Keep `projects/scripts/xvfb-run-eepp` as the fallback when no desktop display is available:
`projects/scripts/xvfb-run-eepp bin/unit_tests/eepp-unit_tests`
The wrapper provides a race-safe isolated display at `1280x1024x24` and injects