mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-04-24 12:04:56 -07:00
init
This commit is contained in:
@@ -13,9 +13,6 @@ beforeEach(() => {
|
||||
});
|
||||
|
||||
describe('detectIde', () => {
|
||||
const ideProcessInfo = { pid: 123, command: 'some/path/to/code' };
|
||||
const ideProcessInfoNoCode = { pid: 123, command: 'some/path/to/fork' };
|
||||
|
||||
beforeEach(() => {
|
||||
// Ensure these env vars don't leak from the host environment
|
||||
vi.stubEnv('ANTIGRAVITY_CLI_ALIAS', '');
|
||||
@@ -40,147 +37,93 @@ describe('detectIde', () => {
|
||||
|
||||
it('should return undefined if TERM_PROGRAM is not vscode', () => {
|
||||
vi.stubEnv('TERM_PROGRAM', '');
|
||||
expect(detectIde(ideProcessInfo)).toBeUndefined();
|
||||
expect(detectIde()).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should detect Devin', () => {
|
||||
vi.stubEnv('TERM_PROGRAM', 'vscode');
|
||||
vi.stubEnv('__COG_BASHRC_SOURCED', '1');
|
||||
expect(detectIde(ideProcessInfo)).toBe(IDE_DEFINITIONS.devin);
|
||||
expect(detectIde()).toBe(IDE_DEFINITIONS.devin);
|
||||
});
|
||||
|
||||
it('should detect Replit', () => {
|
||||
vi.stubEnv('TERM_PROGRAM', 'vscode');
|
||||
vi.stubEnv('REPLIT_USER', 'testuser');
|
||||
expect(detectIde(ideProcessInfo)).toBe(IDE_DEFINITIONS.replit);
|
||||
expect(detectIde()).toBe(IDE_DEFINITIONS.replit);
|
||||
});
|
||||
|
||||
it('should detect Cursor', () => {
|
||||
vi.stubEnv('TERM_PROGRAM', 'vscode');
|
||||
vi.stubEnv('CURSOR_TRACE_ID', 'some-id');
|
||||
expect(detectIde(ideProcessInfo)).toBe(IDE_DEFINITIONS.cursor);
|
||||
expect(detectIde()).toBe(IDE_DEFINITIONS.cursor);
|
||||
});
|
||||
|
||||
it('should detect Codespaces', () => {
|
||||
vi.stubEnv('TERM_PROGRAM', 'vscode');
|
||||
vi.stubEnv('CODESPACES', 'true');
|
||||
vi.stubEnv('CURSOR_TRACE_ID', '');
|
||||
expect(detectIde(ideProcessInfo)).toBe(IDE_DEFINITIONS.codespaces);
|
||||
expect(detectIde()).toBe(IDE_DEFINITIONS.codespaces);
|
||||
});
|
||||
|
||||
it('should detect Cloud Shell via EDITOR_IN_CLOUD_SHELL', () => {
|
||||
vi.stubEnv('TERM_PROGRAM', 'vscode');
|
||||
vi.stubEnv('EDITOR_IN_CLOUD_SHELL', 'true');
|
||||
vi.stubEnv('CURSOR_TRACE_ID', '');
|
||||
expect(detectIde(ideProcessInfo)).toBe(IDE_DEFINITIONS.cloudshell);
|
||||
expect(detectIde()).toBe(IDE_DEFINITIONS.cloudshell);
|
||||
});
|
||||
|
||||
it('should detect Cloud Shell via CLOUD_SHELL', () => {
|
||||
vi.stubEnv('TERM_PROGRAM', 'vscode');
|
||||
vi.stubEnv('CLOUD_SHELL', 'true');
|
||||
vi.stubEnv('CURSOR_TRACE_ID', '');
|
||||
expect(detectIde(ideProcessInfo)).toBe(IDE_DEFINITIONS.cloudshell);
|
||||
expect(detectIde()).toBe(IDE_DEFINITIONS.cloudshell);
|
||||
});
|
||||
|
||||
it('should detect Trae', () => {
|
||||
vi.stubEnv('TERM_PROGRAM', 'vscode');
|
||||
vi.stubEnv('TERM_PRODUCT', 'Trae');
|
||||
vi.stubEnv('CURSOR_TRACE_ID', '');
|
||||
expect(detectIde(ideProcessInfo)).toBe(IDE_DEFINITIONS.trae);
|
||||
expect(detectIde()).toBe(IDE_DEFINITIONS.trae);
|
||||
});
|
||||
|
||||
it('should detect Firebase Studio via MONOSPACE_ENV', () => {
|
||||
vi.stubEnv('TERM_PROGRAM', 'vscode');
|
||||
vi.stubEnv('MONOSPACE_ENV', 'true');
|
||||
vi.stubEnv('CURSOR_TRACE_ID', '');
|
||||
expect(detectIde(ideProcessInfo)).toBe(IDE_DEFINITIONS.firebasestudio);
|
||||
});
|
||||
|
||||
it('should detect VSCode when no other IDE is detected and command includes "code"', () => {
|
||||
vi.stubEnv('TERM_PROGRAM', 'vscode');
|
||||
vi.stubEnv('MONOSPACE_ENV', '');
|
||||
vi.stubEnv('CURSOR_TRACE_ID', '');
|
||||
expect(detectIde(ideProcessInfo)).toBe(IDE_DEFINITIONS.vscode);
|
||||
});
|
||||
|
||||
it('should detect VSCodeFork when no other IDE is detected and command does not include "code"', () => {
|
||||
vi.stubEnv('TERM_PROGRAM', 'vscode');
|
||||
vi.stubEnv('MONOSPACE_ENV', '');
|
||||
vi.stubEnv('CURSOR_TRACE_ID', '');
|
||||
expect(detectIde(ideProcessInfoNoCode)).toBe(IDE_DEFINITIONS.vscodefork);
|
||||
expect(detectIde()).toBe(IDE_DEFINITIONS.firebasestudio);
|
||||
});
|
||||
|
||||
it('should detect AntiGravity', () => {
|
||||
vi.stubEnv('TERM_PROGRAM', 'vscode');
|
||||
vi.stubEnv('ANTIGRAVITY_CLI_ALIAS', 'agy');
|
||||
expect(detectIde(ideProcessInfo)).toBe(IDE_DEFINITIONS.antigravity);
|
||||
expect(detectIde()).toBe(IDE_DEFINITIONS.antigravity);
|
||||
});
|
||||
|
||||
it('should detect Sublime Text', () => {
|
||||
vi.stubEnv('TERM_PROGRAM', 'sublime');
|
||||
vi.stubEnv('ANTIGRAVITY_CLI_ALIAS', '');
|
||||
expect(detectIde(ideProcessInfo)).toBe(IDE_DEFINITIONS.sublimetext);
|
||||
expect(detectIde()).toBe(IDE_DEFINITIONS.sublimetext);
|
||||
});
|
||||
|
||||
it('should prioritize Antigravity over Sublime Text', () => {
|
||||
vi.stubEnv('TERM_PROGRAM', 'sublime');
|
||||
vi.stubEnv('ANTIGRAVITY_CLI_ALIAS', 'agy');
|
||||
expect(detectIde(ideProcessInfo)).toBe(IDE_DEFINITIONS.antigravity);
|
||||
expect(detectIde()).toBe(IDE_DEFINITIONS.antigravity);
|
||||
});
|
||||
|
||||
it('should detect JetBrains IDE via TERMINAL_EMULATOR', () => {
|
||||
vi.stubEnv('TERMINAL_EMULATOR', 'JetBrains-JediTerm');
|
||||
expect(detectIde(ideProcessInfo)).toBe(IDE_DEFINITIONS.jetbrains);
|
||||
});
|
||||
|
||||
describe('JetBrains IDE detection via command', () => {
|
||||
beforeEach(() => {
|
||||
vi.stubEnv('TERMINAL_EMULATOR', 'JetBrains-JediTerm');
|
||||
});
|
||||
|
||||
it.each([
|
||||
[
|
||||
'IntelliJ IDEA',
|
||||
'/Applications/IntelliJ IDEA.app',
|
||||
IDE_DEFINITIONS.intellijidea,
|
||||
],
|
||||
['WebStorm', '/Applications/WebStorm.app', IDE_DEFINITIONS.webstorm],
|
||||
['PyCharm', '/Applications/PyCharm.app', IDE_DEFINITIONS.pycharm],
|
||||
['GoLand', '/Applications/GoLand.app', IDE_DEFINITIONS.goland],
|
||||
[
|
||||
'Android Studio',
|
||||
'/Applications/Android Studio.app',
|
||||
IDE_DEFINITIONS.androidstudio,
|
||||
],
|
||||
['CLion', '/Applications/CLion.app', IDE_DEFINITIONS.clion],
|
||||
['RustRover', '/Applications/RustRover.app', IDE_DEFINITIONS.rustrover],
|
||||
['DataGrip', '/Applications/DataGrip.app', IDE_DEFINITIONS.datagrip],
|
||||
['PhpStorm', '/Applications/PhpStorm.app', IDE_DEFINITIONS.phpstorm],
|
||||
])('should detect %s via command', (_name, command, expectedIde) => {
|
||||
const processInfo = { pid: 123, command };
|
||||
expect(detectIde(processInfo)).toBe(expectedIde);
|
||||
});
|
||||
});
|
||||
|
||||
it('should return generic JetBrains when command does not match specific IDE', () => {
|
||||
vi.stubEnv('TERMINAL_EMULATOR', 'JetBrains-JediTerm');
|
||||
const genericProcessInfo = {
|
||||
pid: 123,
|
||||
command: '/Applications/SomeJetBrainsApp.app',
|
||||
};
|
||||
expect(detectIde(genericProcessInfo)).toBe(IDE_DEFINITIONS.jetbrains);
|
||||
expect(detectIde()).toBe(IDE_DEFINITIONS.jetbrains);
|
||||
});
|
||||
|
||||
it('should prioritize JetBrains detection over VS Code when TERMINAL_EMULATOR is set', () => {
|
||||
vi.stubEnv('TERM_PROGRAM', 'vscode');
|
||||
vi.stubEnv('TERMINAL_EMULATOR', 'JetBrains-JediTerm');
|
||||
expect(detectIde(ideProcessInfo)).toBe(IDE_DEFINITIONS.jetbrains);
|
||||
expect(detectIde()).toBe(IDE_DEFINITIONS.jetbrains);
|
||||
});
|
||||
});
|
||||
|
||||
describe('detectIde with ideInfoFromFile', () => {
|
||||
const ideProcessInfo = { pid: 123, command: 'some/path/to/code' };
|
||||
|
||||
afterEach(() => {
|
||||
vi.unstubAllEnvs();
|
||||
});
|
||||
@@ -205,24 +148,20 @@ describe('detectIde with ideInfoFromFile', () => {
|
||||
name: 'custom-ide',
|
||||
displayName: 'Custom IDE',
|
||||
};
|
||||
expect(detectIde(ideProcessInfo, ideInfoFromFile)).toEqual(ideInfoFromFile);
|
||||
expect(detectIde(ideInfoFromFile)).toEqual(ideInfoFromFile);
|
||||
});
|
||||
|
||||
it('should fall back to env detection if name is missing', () => {
|
||||
const ideInfoFromFile = { displayName: 'Custom IDE' };
|
||||
vi.stubEnv('TERM_PROGRAM', 'vscode');
|
||||
vi.stubEnv('CURSOR_TRACE_ID', '');
|
||||
expect(detectIde(ideProcessInfo, ideInfoFromFile)).toBe(
|
||||
IDE_DEFINITIONS.vscode,
|
||||
);
|
||||
expect(detectIde(ideInfoFromFile)).toBe(IDE_DEFINITIONS.vscode);
|
||||
});
|
||||
|
||||
it('should fall back to env detection if displayName is missing', () => {
|
||||
const ideInfoFromFile = { name: 'custom-ide' };
|
||||
vi.stubEnv('TERM_PROGRAM', 'vscode');
|
||||
vi.stubEnv('CURSOR_TRACE_ID', '');
|
||||
expect(detectIde(ideProcessInfo, ideInfoFromFile)).toBe(
|
||||
IDE_DEFINITIONS.vscode,
|
||||
);
|
||||
expect(detectIde(ideInfoFromFile)).toBe(IDE_DEFINITIONS.vscode);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user