mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-05-13 21:32:56 -07:00
fix(cli): prevent settings dialog border clipping using maxHeight (#26507)
This commit is contained in:
@@ -326,6 +326,36 @@ describe('SettingsDialog', () => {
|
|||||||
});
|
});
|
||||||
unmount();
|
unmount();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should render the bottom border correctly when height is constrained', async () => {
|
||||||
|
const settings = createMockSettings();
|
||||||
|
const onSelect = vi.fn();
|
||||||
|
const constrainedHeight = 15;
|
||||||
|
|
||||||
|
const renderResult = await renderDialog(settings, onSelect, {
|
||||||
|
availableTerminalHeight: constrainedHeight,
|
||||||
|
});
|
||||||
|
|
||||||
|
await renderResult.waitUntilReady();
|
||||||
|
|
||||||
|
await waitFor(() => {
|
||||||
|
const output = renderResult.lastFrame();
|
||||||
|
const lines = output.trim().split('\n');
|
||||||
|
|
||||||
|
// Verify height constraint
|
||||||
|
expect(lines.length).toBeLessThanOrEqual(constrainedHeight);
|
||||||
|
|
||||||
|
// Verify bottom border existence in the last line of the output
|
||||||
|
const lastLine = lines[lines.length - 1];
|
||||||
|
// 'round' border characters: ─, ╰, ╯
|
||||||
|
expect(lastLine).toMatch(/[─╰╯]/);
|
||||||
|
});
|
||||||
|
|
||||||
|
// SVG snapshot ensures visual layout and border rendering are preserved
|
||||||
|
await expect(renderResult).toMatchSvgSnapshot();
|
||||||
|
|
||||||
|
renderResult.unmount();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Setting Descriptions', () => {
|
describe('Setting Descriptions', () => {
|
||||||
|
|||||||
+63
@@ -0,0 +1,63 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="920" height="275" viewBox="0 0 920 275">
|
||||||
|
<style>
|
||||||
|
text { font-family: Consolas, "Courier New", monospace; font-size: 14px; dominant-baseline: text-before-edge; white-space: pre; }
|
||||||
|
</style>
|
||||||
|
<rect width="920" height="275" fill="#000000" />
|
||||||
|
<g transform="translate(10, 10)">
|
||||||
|
<text x="0" y="2" fill="#878787" textLength="900" lengthAdjust="spacingAndGlyphs">╭──────────────────────────────────────────────────────────────────────────────────────────────────╮</text>
|
||||||
|
<text x="0" y="19" fill="#878787" textLength="9" lengthAdjust="spacingAndGlyphs">│</text>
|
||||||
|
<text x="891" y="19" fill="#878787" textLength="9" lengthAdjust="spacingAndGlyphs">│</text>
|
||||||
|
<text x="0" y="36" fill="#878787" textLength="9" lengthAdjust="spacingAndGlyphs">│</text>
|
||||||
|
<text x="27" y="36" fill="#ffffff" textLength="99" lengthAdjust="spacingAndGlyphs" font-weight="bold">> Settings </text>
|
||||||
|
<text x="891" y="36" fill="#878787" textLength="9" lengthAdjust="spacingAndGlyphs">│</text>
|
||||||
|
<text x="0" y="53" fill="#878787" textLength="9" lengthAdjust="spacingAndGlyphs">│</text>
|
||||||
|
<text x="891" y="53" fill="#878787" textLength="9" lengthAdjust="spacingAndGlyphs">│</text>
|
||||||
|
<text x="0" y="70" fill="#878787" textLength="9" lengthAdjust="spacingAndGlyphs">│</text>
|
||||||
|
<text x="18" y="70" fill="#d7ffd7" textLength="864" lengthAdjust="spacingAndGlyphs">╭──────────────────────────────────────────────────────────────────────────────────────────────╮</text>
|
||||||
|
<text x="891" y="70" fill="#878787" textLength="9" lengthAdjust="spacingAndGlyphs">│</text>
|
||||||
|
<text x="0" y="87" fill="#878787" textLength="9" lengthAdjust="spacingAndGlyphs">│</text>
|
||||||
|
<text x="18" y="87" fill="#d7ffd7" textLength="18" lengthAdjust="spacingAndGlyphs">╰─</text>
|
||||||
|
<rect x="36" y="85" width="9" height="17" fill="#ffffff" />
|
||||||
|
<text x="36" y="87" fill="#000000" textLength="9" lengthAdjust="spacingAndGlyphs">S</text>
|
||||||
|
<text x="45" y="87" fill="#afafaf" textLength="135" lengthAdjust="spacingAndGlyphs">earch to filter</text>
|
||||||
|
<text x="180" y="87" fill="#d7ffd7" textLength="702" lengthAdjust="spacingAndGlyphs">─────────────────────────────────────────────────────────────────────────────╯</text>
|
||||||
|
<text x="891" y="87" fill="#878787" textLength="9" lengthAdjust="spacingAndGlyphs">│</text>
|
||||||
|
<text x="0" y="104" fill="#878787" textLength="9" lengthAdjust="spacingAndGlyphs">│</text>
|
||||||
|
<text x="27" y="104" fill="#afafaf" textLength="9" lengthAdjust="spacingAndGlyphs">▲</text>
|
||||||
|
<text x="891" y="104" fill="#878787" textLength="9" lengthAdjust="spacingAndGlyphs">│</text>
|
||||||
|
<text x="0" y="121" fill="#878787" textLength="9" lengthAdjust="spacingAndGlyphs">│</text>
|
||||||
|
<rect x="27" y="119" width="9" height="17" fill="#005f00" />
|
||||||
|
<text x="27" y="121" fill="#d7ffd7" textLength="9" lengthAdjust="spacingAndGlyphs">●</text>
|
||||||
|
<rect x="36" y="119" width="9" height="17" fill="#005f00" />
|
||||||
|
<rect x="45" y="119" width="72" height="17" fill="#005f00" />
|
||||||
|
<text x="45" y="121" fill="#d7ffd7" textLength="72" lengthAdjust="spacingAndGlyphs">Vim Mode</text>
|
||||||
|
<rect x="117" y="119" width="711" height="17" fill="#005f00" />
|
||||||
|
<rect x="828" y="119" width="45" height="17" fill="#005f00" />
|
||||||
|
<text x="828" y="121" fill="#d7ffd7" textLength="45" lengthAdjust="spacingAndGlyphs">false</text>
|
||||||
|
<text x="891" y="121" fill="#878787" textLength="9" lengthAdjust="spacingAndGlyphs">│</text>
|
||||||
|
<text x="0" y="138" fill="#878787" textLength="9" lengthAdjust="spacingAndGlyphs">│</text>
|
||||||
|
<text x="27" y="138" fill="#afafaf" textLength="9" lengthAdjust="spacingAndGlyphs">▼</text>
|
||||||
|
<rect x="45" y="136" width="198" height="17" fill="#005f00" />
|
||||||
|
<text x="45" y="138" fill="#afafaf" textLength="198" lengthAdjust="spacingAndGlyphs">Enable Vim keybindings</text>
|
||||||
|
<text x="891" y="138" fill="#878787" textLength="9" lengthAdjust="spacingAndGlyphs">│</text>
|
||||||
|
<text x="0" y="155" fill="#878787" textLength="9" lengthAdjust="spacingAndGlyphs">│</text>
|
||||||
|
<text x="891" y="155" fill="#878787" textLength="9" lengthAdjust="spacingAndGlyphs">│</text>
|
||||||
|
<text x="0" y="172" fill="#878787" textLength="9" lengthAdjust="spacingAndGlyphs">│</text>
|
||||||
|
<text x="9" y="172" fill="#ffffff" textLength="882" lengthAdjust="spacingAndGlyphs"> Apply To </text>
|
||||||
|
<text x="891" y="172" fill="#878787" textLength="9" lengthAdjust="spacingAndGlyphs">│</text>
|
||||||
|
<text x="0" y="189" fill="#878787" textLength="9" lengthAdjust="spacingAndGlyphs">│</text>
|
||||||
|
<rect x="27" y="187" width="9" height="17" fill="#005f00" />
|
||||||
|
<text x="27" y="189" fill="#d7ffd7" textLength="9" lengthAdjust="spacingAndGlyphs">●</text>
|
||||||
|
<rect x="36" y="187" width="9" height="17" fill="#005f00" />
|
||||||
|
<rect x="45" y="187" width="117" height="17" fill="#005f00" />
|
||||||
|
<text x="45" y="189" fill="#d7ffd7" textLength="117" lengthAdjust="spacingAndGlyphs">User Settings</text>
|
||||||
|
<rect x="162" y="187" width="711" height="17" fill="#005f00" />
|
||||||
|
<text x="891" y="189" fill="#878787" textLength="9" lengthAdjust="spacingAndGlyphs">│</text>
|
||||||
|
<text x="0" y="206" fill="#878787" textLength="9" lengthAdjust="spacingAndGlyphs">│</text>
|
||||||
|
<text x="27" y="206" fill="#afafaf" textLength="657" lengthAdjust="spacingAndGlyphs">(Use Enter to select, Ctrl+L to reset, Tab to change focus, Esc to close)</text>
|
||||||
|
<text x="891" y="206" fill="#878787" textLength="9" lengthAdjust="spacingAndGlyphs">│</text>
|
||||||
|
<text x="0" y="223" fill="#878787" textLength="9" lengthAdjust="spacingAndGlyphs">│</text>
|
||||||
|
<text x="891" y="223" fill="#878787" textLength="9" lengthAdjust="spacingAndGlyphs">│</text>
|
||||||
|
<text x="0" y="240" fill="#878787" textLength="900" lengthAdjust="spacingAndGlyphs">╰──────────────────────────────────────────────────────────────────────────────────────────────────╯</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 6.6 KiB |
@@ -46,6 +46,24 @@ exports[`SettingsDialog > Initial Rendering > should render settings list with v
|
|||||||
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯"
|
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯"
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
exports[`SettingsDialog > Initial Rendering > should render the bottom border correctly when height is constrained 1`] = `
|
||||||
|
"╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
|
||||||
|
│ │
|
||||||
|
│ > Settings │
|
||||||
|
│ │
|
||||||
|
│ ╭──────────────────────────────────────────────────────────────────────────────────────────────╮ │
|
||||||
|
│ ╰─Search to filter─────────────────────────────────────────────────────────────────────────────╯ │
|
||||||
|
│ ▲ │
|
||||||
|
│ ● Vim Mode false │
|
||||||
|
│ ▼ Enable Vim keybindings │
|
||||||
|
│ │
|
||||||
|
│ Apply To │
|
||||||
|
│ ● User Settings │
|
||||||
|
│ (Use Enter to select, Ctrl+L to reset, Tab to change focus, Esc to close) │
|
||||||
|
│ │
|
||||||
|
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯"
|
||||||
|
`;
|
||||||
|
|
||||||
exports[`SettingsDialog > Snapshot Tests > should render 'accessibility settings enabled' correctly 1`] = `
|
exports[`SettingsDialog > Snapshot Tests > should render 'accessibility settings enabled' correctly 1`] = `
|
||||||
"╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
|
"╭──────────────────────────────────────────────────────────────────────────────────────────────────╮
|
||||||
│ │
|
│ │
|
||||||
|
|||||||
@@ -425,7 +425,7 @@ export function BaseSettingsDialog({
|
|||||||
flexDirection="row"
|
flexDirection="row"
|
||||||
padding={1}
|
padding={1}
|
||||||
width="100%"
|
width="100%"
|
||||||
height="100%"
|
maxHeight={availableHeight}
|
||||||
>
|
>
|
||||||
<Box flexDirection="column" flexGrow={1}>
|
<Box flexDirection="column" flexGrow={1}>
|
||||||
{/* Title */}
|
{/* Title */}
|
||||||
|
|||||||
Reference in New Issue
Block a user