From 6f4667d96f08b05f4e09082c42412a974637d8d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Wed, 7 Oct 2026 11:45:02 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5fnm=E9=BB=98=E8=AE=A4=E5=88=AB?= =?UTF-8?q?=E5=90=8D=E7=AC=A6=E5=8F=B7=E9=93=BE=E6=8E=A5=E5=9B=9E=E5=BD=92?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增单测 fnm_default_alias_symlink_selects_the_linked_installation,断言 default 别名选中该链接的 v20 而不是最高的 v22 - 核实评审该项前提有误:fnm 1.39 的 aliases/default 是指向安装目录的符号链接,当前实现本就正确 --- .../src-tauri/src/environment_check.rs | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/apps/ai-game-creator-shell/src-tauri/src/environment_check.rs b/apps/ai-game-creator-shell/src-tauri/src/environment_check.rs index 72d2284ed..fbe50c395 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/environment_check.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/environment_check.rs @@ -1294,6 +1294,28 @@ mod tests { assert_eq!(default.version, (22, 23, 3)); } + #[cfg(unix)] + #[test] + fn fnm_default_alias_symlink_selects_the_linked_installation() { + use std::os::unix::fs::symlink; + + let fnm_root = tempfile::tempdir().unwrap(); + let older = install_fnm_version(fnm_root.path(), "v20.11.0"); + install_fnm_version(fnm_root.path(), "v22.23.3"); + let alias_dir = fnm_root.path().join("aliases"); + fs::create_dir_all(&alias_dir).unwrap(); + // fnm 1.39 的 default 别名是指向安装目录的符号链接,不是版本字符串文件。 + symlink(&older, alias_dir.join("default")).unwrap(); + let installed = installed_node_versions(&[fnm_root.path().to_path_buf()], &[]); + assert_eq!(installed.len(), 2); + let default = + default_managed_installation(&installed, &[fnm_root.path().to_path_buf()], &[]) + .expect("fnm default alias should resolve"); + // 必须跟随别名选中 v20,而不是回退到最高的 v22。 + assert_eq!(default.prefix, older.canonicalize().unwrap()); + assert_eq!(default.version, (20, 11, 0)); + } + #[test] fn version_file_pin_is_authoritative_and_blocks_when_not_installed() { let fnm_root = tempfile::tempdir().unwrap();