diff options
Diffstat (limited to 'packages/cli/src/config')
| -rw-r--r-- | packages/cli/src/config/config.test.ts | 99 | ||||
| -rw-r--r-- | packages/cli/src/config/config.ts | 7 | ||||
| -rw-r--r-- | packages/cli/src/config/settings.ts | 1 |
3 files changed, 97 insertions, 10 deletions
diff --git a/packages/cli/src/config/config.test.ts b/packages/cli/src/config/config.test.ts index b24e4170..e443bbe5 100644 --- a/packages/cli/src/config/config.test.ts +++ b/packages/cli/src/config/config.test.ts @@ -7,16 +7,10 @@ // packages/cli/src/config/config.test.ts import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; -// import * as fsPromises from 'fs/promises'; -// import * as fsSync from 'fs'; import * as os from 'os'; -// import * as path from 'path'; // Unused, so removing -// import { readPackageUp } from 'read-package-up'; -// import { -// loadHierarchicalGeminiMemory, -// } from './config'; -// import { Settings } from './settings'; -// import * as ServerConfig from '@gemini-code/server'; +import { loadCliConfig } from './config.js'; +import { Settings } from './settings.js'; +import * as ServerConfig from '@gemini-code/server'; const MOCK_HOME_DIR = '/mock/home/user'; @@ -28,7 +22,92 @@ vi.mock('os', async (importOriginal) => { }; }); -// Further mocking of fs, read-package-up, etc. would go here if tests were active. +vi.mock('read-package-up', () => ({ + readPackageUp: vi.fn(() => + Promise.resolve({ packageJson: { version: 'test-version' } }), + ), +})); + +vi.mock('@gemini-code/server', async () => { + const actualServer = await vi.importActual<typeof ServerConfig>( + '@gemini-code/server', + ); + return { + ...actualServer, + loadEnvironment: vi.fn(), + createServerConfig: vi.fn((params) => ({ + // Mock the config object and its methods + getApiKey: () => params.apiKey, + getModel: () => params.model, + getSandbox: () => params.sandbox, + getTargetDir: () => params.targetDir, + getDebugMode: () => params.debugMode, + getQuestion: () => params.question, + getFullContext: () => params.fullContext, + getCoreTools: () => params.coreTools, + getToolDiscoveryCommand: () => params.toolDiscoveryCommand, + getToolCallCommand: () => params.toolCallCommand, + getMcpServerCommand: () => params.mcpServerCommand, + getMcpServers: () => params.mcpServers, + getUserAgent: () => params.userAgent, + getUserMemory: () => params.userMemory, + getGeminiMdFileCount: () => params.geminiMdFileCount, + getVertexAI: () => params.vertexai, + getShowMemoryUsage: () => params.showMemoryUsage, // Added for the test + // Add any other methods that are called on the config object + setUserMemory: vi.fn(), + setGeminiMdFileCount: vi.fn(), + })), + loadServerHierarchicalMemory: vi.fn(() => + Promise.resolve({ memoryContent: '', fileCount: 0 }), + ), + }; +}); + +describe('loadCliConfig', () => { + const originalArgv = process.argv; + const originalEnv = { ...process.env }; + + beforeEach(() => { + vi.resetAllMocks(); + vi.mocked(os.homedir).mockReturnValue(MOCK_HOME_DIR); + process.env.GEMINI_API_KEY = 'test-api-key'; // Ensure API key is set for tests + }); + + afterEach(() => { + process.argv = originalArgv; + process.env = originalEnv; + vi.restoreAllMocks(); + }); + + it('should set showMemoryUsage to true when --memory flag is present', async () => { + process.argv = ['node', 'script.js', '--show_memory_usage']; + const settings: Settings = {}; + const config = await loadCliConfig(settings); + expect(config.getShowMemoryUsage()).toBe(true); + }); + + it('should set showMemoryUsage to false when --memory flag is not present', async () => { + process.argv = ['node', 'script.js']; + const settings: Settings = {}; + const config = await loadCliConfig(settings); + expect(config.getShowMemoryUsage()).toBe(false); + }); + + it('should set showMemoryUsage to false by default from settings if CLI flag is not present', async () => { + process.argv = ['node', 'script.js']; + const settings: Settings = { showMemoryUsage: false }; + const config = await loadCliConfig(settings); + expect(config.getShowMemoryUsage()).toBe(false); + }); + + it('should prioritize CLI flag over settings for showMemoryUsage (CLI true, settings false)', async () => { + process.argv = ['node', 'script.js', '--show_memory_usage']; + const settings: Settings = { showMemoryUsage: false }; + const config = await loadCliConfig(settings); + expect(config.getShowMemoryUsage()).toBe(true); + }); +}); describe('Hierarchical Memory Loading (config.ts) - Placeholder Suite', () => { beforeEach(() => { diff --git a/packages/cli/src/config/config.ts b/packages/cli/src/config/config.ts index 14b02538..1808f545 100644 --- a/packages/cli/src/config/config.ts +++ b/packages/cli/src/config/config.ts @@ -35,6 +35,7 @@ interface CliArgs { debug: boolean | undefined; prompt: string | undefined; all_files: boolean | undefined; + show_memory_usage: boolean | undefined; } async function parseArguments(): Promise<CliArgs> { @@ -67,6 +68,11 @@ async function parseArguments(): Promise<CliArgs> { description: 'Include ALL files in context?', default: false, }) + .option('show_memory_usage', { + type: 'boolean', + description: 'Show memory usage in status bar', + default: false, + }) .help() .alias('h', 'help') .strict().argv; @@ -152,6 +158,7 @@ export async function loadCliConfig(settings: Settings): Promise<Config> { userMemory: memoryContent, geminiMdFileCount: fileCount, vertexai: useVertexAI, + showMemoryUsage: argv.show_memory_usage || false, }; return createServerConfig(configParams); diff --git a/packages/cli/src/config/settings.ts b/packages/cli/src/config/settings.ts index 25ec5cb4..efb083cc 100644 --- a/packages/cli/src/config/settings.ts +++ b/packages/cli/src/config/settings.ts @@ -27,6 +27,7 @@ export interface Settings { toolCallCommand?: string; mcpServerCommand?: string; mcpServers?: Record<string, MCPServerConfig>; + showMemoryUsage?: boolean; // Add other settings here. } |
