mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-03-12 15:10:59 -07:00
118 lines
2.9 KiB
TypeScript
118 lines
2.9 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2026 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
import { expandEnvVars } from './envExpansion.js';
|
|
|
|
describe('expandEnvVars', () => {
|
|
const defaultEnv = {
|
|
USER: 'morty',
|
|
HOME: '/home/morty',
|
|
TEMP: 'C:\\Temp',
|
|
EMPTY: '',
|
|
};
|
|
|
|
describe('POSIX behavior (non-Windows)', () => {
|
|
beforeEach(() => {
|
|
vi.spyOn(process, 'platform', 'get').mockReturnValue('darwin');
|
|
});
|
|
|
|
afterEach(() => {
|
|
vi.restoreAllMocks();
|
|
});
|
|
|
|
it.each([
|
|
['$VAR (POSIX)', 'Hello $USER', defaultEnv, 'Hello morty'],
|
|
[
|
|
'${VAR} (POSIX)',
|
|
'Welcome to ${HOME}',
|
|
defaultEnv,
|
|
'Welcome to /home/morty',
|
|
],
|
|
[
|
|
'should NOT expand %VAR% on non-Windows',
|
|
'Data in %TEMP%',
|
|
defaultEnv,
|
|
'Data in %TEMP%',
|
|
],
|
|
[
|
|
'mixed formats (only POSIX expanded)',
|
|
'$USER lives in ${HOME} on %TEMP%',
|
|
defaultEnv,
|
|
'morty lives in /home/morty on %TEMP%',
|
|
],
|
|
[
|
|
'missing variables (POSIX only)',
|
|
'Missing $UNDEFINED and ${NONE} and %MISSING%',
|
|
defaultEnv,
|
|
'Missing and and %MISSING%',
|
|
],
|
|
[
|
|
'empty or undefined values',
|
|
'Value is "$EMPTY"',
|
|
defaultEnv,
|
|
'Value is ""',
|
|
],
|
|
[
|
|
'original string if no variables',
|
|
'No vars here',
|
|
defaultEnv,
|
|
'No vars here',
|
|
],
|
|
['literal values like "1234"', '1234', defaultEnv, '1234'],
|
|
['empty input string', '', defaultEnv, ''],
|
|
[
|
|
'complex paths',
|
|
'${HOME}/bin:$PATH',
|
|
{ ...defaultEnv, PATH: '/usr/bin' },
|
|
'/home/morty/bin:/usr/bin',
|
|
],
|
|
])('should handle %s', (_, input, env, expected) => {
|
|
expect(expandEnvVars(input, env)).toBe(expected);
|
|
});
|
|
});
|
|
|
|
describe('Windows behavior', () => {
|
|
beforeEach(() => {
|
|
vi.spyOn(process, 'platform', 'get').mockReturnValue('win32');
|
|
});
|
|
|
|
afterEach(() => {
|
|
vi.restoreAllMocks();
|
|
});
|
|
|
|
it.each([
|
|
['$VAR (POSIX)', 'Hello $USER', defaultEnv, 'Hello morty'],
|
|
[
|
|
'${VAR} (POSIX)',
|
|
'Welcome to ${HOME}',
|
|
defaultEnv,
|
|
'Welcome to /home/morty',
|
|
],
|
|
[
|
|
'should expand %VAR% on Windows',
|
|
'Data in %TEMP%',
|
|
defaultEnv,
|
|
'Data in C:\\Temp',
|
|
],
|
|
[
|
|
'mixed formats (both expanded)',
|
|
'$USER lives in ${HOME} on %TEMP%',
|
|
defaultEnv,
|
|
'morty lives in /home/morty on C:\\Temp',
|
|
],
|
|
[
|
|
'missing variables (all expanded to empty)',
|
|
'Missing $UNDEFINED and ${NONE} and %MISSING%',
|
|
defaultEnv,
|
|
'Missing and and ',
|
|
],
|
|
])('should handle %s', (_, input, env, expected) => {
|
|
expect(expandEnvVars(input, env)).toBe(expected);
|
|
});
|
|
});
|
|
});
|