/** * @license * Copyright 2025 Google LLC * SPDX-License-Identifier: Apache-2.0 */ import { render } from 'ink-testing-library'; import { describe, it, expect, vi } from 'vitest'; import { Footer } from './Footer.js'; import * as useTerminalSize from '../hooks/useTerminalSize.js'; import { tildeifyPath } from '@qwen-code/qwen-code-core'; import { type UIState, UIStateContext } from '../contexts/UIStateContext.js'; import { ConfigContext } from '../contexts/ConfigContext.js'; import { SettingsContext } from '../contexts/SettingsContext.js'; import type { LoadedSettings } from '../../config/settings.js'; import { VimModeProvider } from '../contexts/VimModeContext.js'; vi.mock('../hooks/useTerminalSize.js'); const useTerminalSizeMock = vi.mocked(useTerminalSize.useTerminalSize); vi.mock('@qwen-code/qwen-code-core', async (importOriginal) => { const original = await importOriginal(); return { ...original, shortenPath: (p: string, len: number) => { if (p.length > len) { return '...' + p.slice(p.length - len + 3); } return p; }, }; }); const defaultProps = { model: 'gemini-pro', targetDir: '/Users/test/project/foo/bar/and/some/more/directories/to/make/it/long', branchName: 'main', }; const createMockConfig = (overrides = {}) => ({ getModel: vi.fn(() => defaultProps.model), getTargetDir: vi.fn(() => defaultProps.targetDir), getDebugMode: vi.fn(() => false), ...overrides, }); const createMockUIState = (overrides: Partial = {}): UIState => ({ sessionStats: { lastPromptTokenCount: 100, }, branchName: defaultProps.branchName, ...overrides, }) as UIState; const createDefaultSettings = ( options: { showMemoryUsage?: boolean; hideCWD?: boolean; hideSandboxStatus?: boolean; hideModelInfo?: boolean; } = {}, ): LoadedSettings => ({ merged: { ui: { showMemoryUsage: options.showMemoryUsage, footer: { hideCWD: options.hideCWD, hideSandboxStatus: options.hideSandboxStatus, hideModelInfo: options.hideModelInfo, }, }, }, }) as never; const renderWithWidth = ( width: number, uiState: UIState, settings: LoadedSettings = createDefaultSettings(), ) => { useTerminalSizeMock.mockReturnValue({ columns: width, rows: 24 }); return render(