接口开始5%

This commit is contained in:
rain
2026-07-22 17:31:33 +08:00
parent eced3d1e6e
commit 9b0ad62df4
426 changed files with 20111 additions and 28472 deletions
@@ -0,0 +1,68 @@
import assert from 'node:assert/strict'
import path from 'node:path'
import test from 'node:test'
import { resolvePythonExecutable, runPythonCommand } from '../scripts/python-runtime.mjs'
test('显式 PYTHON 配置优先于所有自动发现路径', () => {
const selected = resolvePythonExecutable({
pipelineDirectory: 'C:\\repo\\design-pipeline',
environment: {
PYTHON: 'D:\\tools\\python.exe',
LOCALAPPDATA: 'C:\\Users\\tester\\AppData\\Local',
},
platform: 'win32',
pathExists: () => true,
canRun: candidate => candidate === 'D:\\tools\\python.exe',
})
assert.equal(selected, 'D:\\tools\\python.exe')
})
test('Windows 环境在虚拟环境缺失时选择 Python Manager 的真实入口', () => {
const managerPython = path.win32.join(
'C:\\Users\\tester\\AppData\\Local',
'Python',
'bin',
'python.exe',
)
const selected = resolvePythonExecutable({
pipelineDirectory: 'C:\\repo\\design-pipeline',
environment: { LOCALAPPDATA: 'C:\\Users\\tester\\AppData\\Local' },
platform: 'win32',
pathExists: candidate => candidate === managerPython,
canRun: candidate => candidate === managerPython,
})
assert.equal(selected, managerPython)
})
test('所有候选解释器均不可用时给出可执行的中文修复指引', () => {
assert.throws(
() => resolvePythonExecutable({
pipelineDirectory: 'C:\\repo\\design-pipeline',
environment: {},
platform: 'win32',
pathExists: () => false,
canRun: () => false,
}),
/ Python.*PYTHON.*\.venv/s,
)
})
test('统一执行器始终把禁止字节码缓存参数放在首位', () => {
let invocation
runPythonCommand({
executable: 'python-test',
args: ['script.py', '--flag'],
cwd: 'C:\\repo',
spawn: (command, args, options) => {
invocation = { command, args, options }
return { status: 0 }
},
})
assert.equal(invocation.command, 'python-test')
assert.deepEqual(invocation.args, ['-B', 'script.py', '--flag'])
assert.equal(invocation.options.cwd, 'C:\\repo')
})