50 lines
1.8 KiB
JavaScript
50 lines
1.8 KiB
JavaScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import toolInvocation from '../src/shared/tool-invocation.cjs';
|
|
import processRunner from '../src/main/process-runner.cjs';
|
|
|
|
const { npmProbeCandidates } = toolInvocation;
|
|
const { run } = processRunner;
|
|
|
|
test('uses npm CLI through Node when doctor is launched by npm on Windows', () => {
|
|
const candidates = npmProbeCandidates({
|
|
platform: 'win32',
|
|
execPath: 'C:\\Program Files\\nodejs\\node.exe',
|
|
env: {
|
|
npm_execpath: 'C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js',
|
|
npm_node_execpath: 'C:\\Program Files\\nodejs\\node.exe',
|
|
ComSpec: 'C:\\Windows\\System32\\cmd.exe'
|
|
}
|
|
});
|
|
assert.deepEqual(candidates[0], {
|
|
file: 'C:\\Program Files\\nodejs\\node.exe',
|
|
args: ['C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js', '--version'],
|
|
source: 'npm_execpath'
|
|
});
|
|
});
|
|
|
|
test('falls back to cmd.exe for npm command shims on Windows', () => {
|
|
const candidates = npmProbeCandidates({
|
|
platform: 'win32',
|
|
execPath: 'C:\\Program Files\\nodejs\\node.exe',
|
|
env: { ComSpec: 'C:\\Windows\\System32\\cmd.exe' }
|
|
});
|
|
assert.deepEqual(candidates, [{
|
|
file: 'C:\\Windows\\System32\\cmd.exe',
|
|
args: ['/d', '/s', '/c', 'npm --version'],
|
|
source: 'windows-command-shim'
|
|
}]);
|
|
});
|
|
|
|
test('uses npm directly on non-Windows systems', () => {
|
|
assert.deepEqual(npmProbeCandidates({ platform: 'linux', env: {}, execPath: '/usr/bin/node' }), [
|
|
{ file: 'npm', args: ['--version'], source: 'path' }
|
|
]);
|
|
});
|
|
|
|
|
|
test('process runner accepts stdin for Git pathspec transport', async () => {
|
|
const result = await run(process.execPath, ['-e', 'process.stdin.pipe(process.stdout)'], { input: 'a\0b\0' });
|
|
assert.equal(result.stdout, 'a\0b\0');
|
|
});
|