diff options
| author | Shreya Keshive <[email protected]> | 2025-07-14 12:04:08 -0400 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-07-14 16:04:08 +0000 |
| commit | fadc477001cfcf988b9565b5d9d6ccd0da15a35c (patch) | |
| tree | 4a3e64ee85e865f6ec000225cfacbcaea24eb35e /packages/cli/src/config/config.test.ts | |
| parent | e9d680e8a45b18152042214891132eec60e4a09b (diff) | |
Add feature flag for IDE integration (#3927)
Co-authored-by: Scott Densmore <[email protected]>
Diffstat (limited to 'packages/cli/src/config/config.test.ts')
| -rw-r--r-- | packages/cli/src/config/config.test.ts | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/packages/cli/src/config/config.test.ts b/packages/cli/src/config/config.test.ts index 08a85e4d..ad8b1d44 100644 --- a/packages/cli/src/config/config.test.ts +++ b/packages/cli/src/config/config.test.ts @@ -768,3 +768,117 @@ describe('loadCliConfig extensions', () => { expect(config.getExtensionContextFilePaths()).toEqual(['/path/to/ext1.md']); }); }); + +describe('loadCliConfig ideMode', () => { + const originalArgv = process.argv; + const originalEnv = { ...process.env }; + + beforeEach(() => { + vi.resetAllMocks(); + vi.mocked(os.homedir).mockReturnValue('/mock/home/user'); + process.env.GEMINI_API_KEY = 'test-api-key'; + // Explicitly delete TERM_PROGRAM and SANDBOX before each test + delete process.env.TERM_PROGRAM; + delete process.env.SANDBOX; + }); + + afterEach(() => { + process.argv = originalArgv; + process.env = originalEnv; + vi.restoreAllMocks(); + }); + + it('should be false by default', async () => { + process.argv = ['node', 'script.js']; + const settings: Settings = {}; + const argv = await parseArguments(); + const config = await loadCliConfig(settings, [], 'test-session', argv); + expect(config.getIdeMode()).toBe(false); + }); + + it('should be false if --ide-mode is true but TERM_PROGRAM is not vscode', async () => { + process.argv = ['node', 'script.js', '--ide-mode']; + const settings: Settings = {}; + const argv = await parseArguments(); + const config = await loadCliConfig(settings, [], 'test-session', argv); + expect(config.getIdeMode()).toBe(false); + }); + + it('should be false if settings.ideMode is true but TERM_PROGRAM is not vscode', async () => { + process.argv = ['node', 'script.js']; + const argv = await parseArguments(); + const settings: Settings = { ideMode: true }; + const config = await loadCliConfig(settings, [], 'test-session', argv); + expect(config.getIdeMode()).toBe(false); + }); + + it('should be true when --ide-mode is set and TERM_PROGRAM is vscode', async () => { + process.argv = ['node', 'script.js', '--ide-mode']; + const argv = await parseArguments(); + process.env.TERM_PROGRAM = 'vscode'; + const settings: Settings = {}; + const config = await loadCliConfig(settings, [], 'test-session', argv); + expect(config.getIdeMode()).toBe(true); + }); + + it('should be true when settings.ideMode is true and TERM_PROGRAM is vscode', async () => { + process.argv = ['node', 'script.js']; + const argv = await parseArguments(); + process.env.TERM_PROGRAM = 'vscode'; + const settings: Settings = { ideMode: true }; + const config = await loadCliConfig(settings, [], 'test-session', argv); + expect(config.getIdeMode()).toBe(true); + }); + + it('should prioritize --ide-mode (true) over settings (false) when TERM_PROGRAM is vscode', async () => { + process.argv = ['node', 'script.js', '--ide-mode']; + const argv = await parseArguments(); + process.env.TERM_PROGRAM = 'vscode'; + const settings: Settings = { ideMode: false }; + const config = await loadCliConfig(settings, [], 'test-session', argv); + expect(config.getIdeMode()).toBe(true); + }); + + it('should prioritize --no-ide-mode (false) over settings (true) even when TERM_PROGRAM is vscode', async () => { + process.argv = ['node', 'script.js', '--no-ide-mode']; + const argv = await parseArguments(); + process.env.TERM_PROGRAM = 'vscode'; + const settings: Settings = { ideMode: true }; + const config = await loadCliConfig(settings, [], 'test-session', argv); + expect(config.getIdeMode()).toBe(false); + }); + + it('should be false when --ide-mode is true, TERM_PROGRAM is vscode, but SANDBOX is set', async () => { + process.argv = ['node', 'script.js', '--ide-mode']; + const argv = await parseArguments(); + process.env.TERM_PROGRAM = 'vscode'; + process.env.SANDBOX = 'true'; + const settings: Settings = {}; + const config = await loadCliConfig(settings, [], 'test-session', argv); + expect(config.getIdeMode()).toBe(false); + }); + + it('should be false when settings.ideMode is true, TERM_PROGRAM is vscode, but SANDBOX is set', async () => { + process.argv = ['node', 'script.js']; + const argv = await parseArguments(); + process.env.TERM_PROGRAM = 'vscode'; + process.env.SANDBOX = 'true'; + const settings: Settings = { ideMode: true }; + const config = await loadCliConfig(settings, [], 'test-session', argv); + expect(config.getIdeMode()).toBe(false); + }); + + it('should add __ide_server when ideMode is true', async () => { + process.argv = ['node', 'script.js', '--ide-mode']; + const argv = await parseArguments(); + process.env.TERM_PROGRAM = 'vscode'; + const settings: Settings = {}; + const config = await loadCliConfig(settings, [], 'test-session', argv); + expect(config.getIdeMode()).toBe(true); + const mcpServers = config.getMcpServers(); + expect(mcpServers['_ide_server']).toBeDefined(); + expect(mcpServers['_ide_server'].httpUrl).toBe('http://localhost:3000/mcp'); + expect(mcpServers['_ide_server'].description).toBe('IDE connection'); + expect(mcpServers['_ide_server'].trust).toBe(false); + }); +}); |
