Let the pane headers' paths actually trim
ci / build and test (push) Failing after 2m11s
ci / desktop nightly (push) Skipped
ci / api image (push) Skipped
ci / android head (push) Successful in 3m18s

TextTrimming only acts when measure hands the block a finite width, and a
horizontal StackPanel never does — it measures every child at infinity and an
Auto grid column passes the full answer on. So both SFTP pane headers grew
with their path, and a directory deep enough pushed the header's own icon
buttons past the window's edge at the session shell's 472-pixel budget.

The layout suite has said so on every CI run since v5b landed, and nowhere
else: the runner's per-job HOME is a 46-character path, which is what the
local pane opens on, and every developer machine's short profile path left
the same test green. The path sits alone in the star column now — bounded
width, working ellipsis — and the narrowest-budget test pins both panes to
sixty-character paths so the question is asked on every machine alike;
against the old markup that test fails on Windows too.
This commit is contained in:
2026-08-08 22:28:26 +02:00
parent 009b35e069
commit de0b5f12ae
2 changed files with 44 additions and 14 deletions
@@ -1481,17 +1481,29 @@ public sealed class ScreenLayoutTests : IAsyncLifetime
}
/// <remarks>
/// <para>
/// The narrowest real shape wave C's restyle has to survive at once: connected, so QUICK ACCESS's own
/// sidebar takes its 300 pixels — see <see cref="LayoutHarness.SessionScreenWidth"/> — a populated remote
/// listing carrying every colour state a row can show (a directory, an executable, a world-writable
/// file), and a full transfer queue underneath, all inside the 204-pixel-a-side budget that leaves either
/// pane.
/// </para>
/// <para>
/// Both pane headers carry a deep path on purpose, and the paths are set here rather than left to the
/// fixture's real filesystem. The header's ellipsis only works because the path sits alone in a star
/// column — see the pane header remark in <c>TransfersScreen.axaml</c> — and the regression it guards
/// against armed itself only on a machine whose home directory happened to be long: CI's per-job HOME
/// found it, every developer machine's short profile path missed it. A pinned sixty-character path asks
/// the question on every machine alike.
/// </para>
/// </remarks>
[Fact]
public async Task TheRestyledPanesFitTheSessionShellsNarrowestBudget()
{
transfers.IsConnected = true;
transfers.ConnectedTo = "deployment-service@releases.eu-west.internal.example:2222";
transfers.LocalPath = "/home/deployment-service/.cache/build/workspaces/site/artefacts";
transfers.RemotePath = "/srv/releases/site/shared/uploads/production/2026/08/nightly";
transfers.RemoteEntries.Add(new RemoteEntryRowViewModel(new SftpEntry(
"docker-compose.yml", "/srv/releases/site/docker-compose.yml", SftpEntryKind.File,