mirror of
https://github.com/ajisaacs/OpenNest.git
synced 2026-11-05 14:51:36 -05:00
WinForms tests open real windows that take focus from the user's work. Test-Hidden.ps1 runs them on a separate Win32 desktop in the same window station, so forms keep real handles and message loops while nothing appears. A job object ends the whole tree on any exit, and a timeout stops runs stuck on a modal dialog nobody can dismiss there. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
44 lines
2.0 KiB
Markdown
44 lines
2.0 KiB
Markdown
# Hidden-desktop test runs
|
|
|
|
WinForms tests create real windows, which appear on the screen and take focus
|
|
from whatever you are doing. `scripts/Test-Hidden.ps1` runs `dotnet test` on a
|
|
separate Win32 desktop instead, so nothing appears and focus stays put.
|
|
|
|
```powershell
|
|
# OpenNest.WinForms.Tests
|
|
.\scripts\Test-Hidden.ps1
|
|
|
|
# Any dotnet test arguments, passed through unchanged
|
|
.\scripts\Test-Hidden.ps1 OpenNest.WinForms.Tests/OpenNest.WinForms.Tests.csproj --no-build --filter FullyQualifiedName~DrawingLibrary
|
|
|
|
# Allow longer than the default 30 minutes
|
|
.\scripts\Test-Hidden.ps1 -HiddenTimeoutMinutes 60
|
|
```
|
|
|
|
Output streams back as usual and the exit code is that of `dotnet test`, or 124
|
|
after a timeout. It needs no feature, setting or administrator rights.
|
|
|
|
## How it behaves
|
|
|
|
- The desktop is created in the current window station, so forms get real
|
|
window handles, message loops, layout and `DrawToBitmap`. Focus also works
|
|
within the desktop: the focus-traversal tests pass unchanged.
|
|
- Nobody can see or dismiss a window there. A test stuck on a modal dialog stops
|
|
at the timeout, and the error says so.
|
|
- The run lives in a job object, so stopping the script or reaching the timeout
|
|
ends the whole process tree. MSBuild node reuse and the shared compiler are
|
|
turned off for the run, so a build inside it can be slower; use `--no-build`
|
|
after building normally.
|
|
- Whatever a test hands to the shell, such as opening a file through
|
|
`UseShellExecute`, can be started by Explorer and appear on your desktop. The
|
|
WinForms suite does not do this.
|
|
|
|
## Alternatives
|
|
|
|
- **Windows Sandbox**: isolates more, but a user must enable the optional
|
|
feature, and each sandbox starts empty. A `.wsb` file would have to map the
|
|
repository and an SDK folder and then start from cold every run.
|
|
- **CI or a remote runner**: suits full verification and needs no local desktop,
|
|
but a push-and-wait cycle is too slow for iterating on a dialog, and a runner
|
|
must have an interactive session for its windows to behave.
|