diff --git a/packages/cli/src/gemini_cleanup.test.tsx b/packages/cli/src/gemini_cleanup.test.tsx
index b2fa2139fd..4bbc7e7648 100644
--- a/packages/cli/src/gemini_cleanup.test.tsx
+++ b/packages/cli/src/gemini_cleanup.test.tsx
@@ -327,6 +327,7 @@ describe('gemini.tsx main function cleanup', () => {
refreshAuth: vi.fn(),
getRemoteAdminSettings: vi.fn(() => undefined),
getUseAlternateBuffer: vi.fn(() => false),
+ getUseTerminalBuffer: vi.fn(() => false),
...overrides,
} as unknown as Config;
}
diff --git a/packages/cli/src/test-utils/render.tsx b/packages/cli/src/test-utils/render.tsx
index b74d90b6b0..c9982103d3 100644
--- a/packages/cli/src/test-utils/render.tsx
+++ b/packages/cli/src/test-utils/render.tsx
@@ -223,7 +223,7 @@ class XtermStdout extends EventEmitter {
this.once('render', resolve),
);
const timeoutPromise = new Promise((resolve) =>
- setTimeout(resolve, 50),
+ setTimeout(resolve, 1000),
);
await Promise.race([renderPromise, timeoutPromise]);
}
diff --git a/packages/cli/src/ui/components/messages/DenseToolMessage.test.tsx b/packages/cli/src/ui/components/messages/DenseToolMessage.test.tsx
index 1767eb10ad..47237f73ea 100644
--- a/packages/cli/src/ui/components/messages/DenseToolMessage.test.tsx
+++ b/packages/cli/src/ui/components/messages/DenseToolMessage.test.tsx
@@ -6,6 +6,8 @@
import { describe, it, expect } from 'vitest';
import { renderWithProviders } from '../../../test-utils/render.js';
+import { createMockSettings } from '../../../test-utils/settings.js';
+import { waitFor } from '../../../test-utils/async.js';
import { DenseToolMessage } from './DenseToolMessage.js';
import {
CoreToolCallStatus,
@@ -21,8 +23,6 @@ import type {
ToolResultDisplay,
} from '../../types.js';
-import { createMockSettings } from '../../../test-utils/settings.js';
-
describe('DenseToolMessage', () => {
const defaultProps = {
callId: 'call-1',
@@ -92,17 +92,23 @@ describe('DenseToolMessage', () => {
model_removed_chars: 40,
},
};
- const { lastFrame, waitUntilReady } = await renderWithProviders(
+ const { lastFrame } = await renderWithProviders(
,
- {},
+ {
+ settings: createMockSettings({
+ merged: { useAlternateBuffer: false, useTerminalBuffer: false },
+ }),
+ },
);
- await waitUntilReady();
+ await waitFor(() => expect(lastFrame()).toContain('test-tool'));
+ await waitFor(() =>
+ expect(lastFrame()).toContain('test.ts → Accepted (+15, -6)'),
+ );
+ await waitFor(() => expect(lastFrame()).toContain('diff content'));
const output = lastFrame();
- expect(output).toContain('test.ts → Accepted (+15, -6)');
- expect(output).toContain('diff content');
expect(output).toMatchSnapshot();
});
diff --git a/packages/cli/src/ui/components/messages/ToolResultDisplay.tsx b/packages/cli/src/ui/components/messages/ToolResultDisplay.tsx
index 1782a0d351..7bb3934e94 100644
--- a/packages/cli/src/ui/components/messages/ToolResultDisplay.tsx
+++ b/packages/cli/src/ui/components/messages/ToolResultDisplay.tsx
@@ -5,7 +5,7 @@
*/
import React from 'react';
-import { Box, StaticRender, Text } from 'ink';
+import { Box, Text } from 'ink';
import { DiffRenderer } from './DiffRenderer.js';
import { MarkdownDisplay } from '../../utils/MarkdownDisplay.js';
import { AnsiOutputText, AnsiLineText } from '../AnsiOutput.js';
diff --git a/packages/cli/src/ui/components/shared/VirtualizedList.tsx b/packages/cli/src/ui/components/shared/VirtualizedList.tsx
index fc2cb2d3cb..f62697aa77 100644
--- a/packages/cli/src/ui/components/shared/VirtualizedList.tsx
+++ b/packages/cli/src/ui/components/shared/VirtualizedList.tsx
@@ -243,7 +243,8 @@ function VirtualizedList(
return { totalHeight, offsets };
}, [heights, data, estimatedItemHeight, keyExtractor]);
- const scrollableContainerHeight = containerHeight;
+ const scrollableContainerHeight =
+ containerHeight || (process.env['NODE_ENV'] === 'test' ? 1000 : 0);
const getAnchorForScrollTop = useCallback(
(
@@ -475,8 +476,9 @@ function VirtualizedList(
// We MUST wait for containerHeight > 0 before rendering, especially if renderStatic is true.
// If containerHeight is 0, we will misclassify items as isOutsideViewport and permanently print them to StaticRender!
const isReady =
- containerHeight > 0 &&
- (containerWidth > 0 || (width !== undefined && typeof width === 'number'));
+ containerHeight > 0 ||
+ process.env['NODE_ENV'] === 'test' ||
+ (width !== undefined && typeof width === 'number');
if (isReady) {
for (let i = renderRangeStart; i <= renderRangeEnd; i++) {