fix(m157): r4 修复未收集的周快照用例 + 两处 clippy 红,并补整环回归(复审 p1-2)

P1-1 crates/core/src/launch/overrides/tests.rs:modded_weekly_snapshot_needs_the_root_version_for_the_gate 原先写在 backend_allowed_combines_capability_and_threshold 函数体内(unnameable_test_items,永不执行)。移到模块层;移动后首次真正执行暴露出用例自身的 EmptyJavaPath(AdapterOptions 默认 java 为空),补 JavaSelection 后绿。--list 现在 10 条 launch::overrides::tests::(含该名字)。

P1-2 clippy -D warnings 两处:cli/commands/instance_launch.rs needless_borrows_for_generic_args(去 &);presenter/mock_data.rs items_after_test_module(mock_launch 移到 mod tests 之前)。

P3-a 新增整环回归 app/tests/instances_save_loop.rs:真 Message → dispatch → 后端回错误 Toast → pump → refresh_view → sync_launch_form,断言 4g 草稿与脏标记都还在。
P3-b LaunchForm::matches 内存改按数值比(解析失败退文本),补 memory_is_compared_by_value_not_by_text(04096 / +4096 / 清空三档)。
P3-c 门槛文案不再在 catalog 硬编码 26.2:InstancesLaunchBackendGated 改用 {min} 占位符,页面从 LaunchFacts::min_version(← core GRAPHICS_BACKEND_MIN_VERSION)代入;金表同步;灰化态截图重拍。
This commit is contained in:
AskaEth committed 2026-11-07 11:06:18 +08:00
1 parent 211e07b470
commit ee67965b9b
11 files changed
+285 -87

No files matched your search

+55 -52
View File
@@ -295,59 +295,62 @@ fn backend_allowed_combines_capability_and_threshold() {
// 周快照:看库表。
assert!(backend_allowed(&GameVersion::parse("26w14a"), &with_vulkan));
assert!(!backend_allowed(&GameVersion::parse("26w14a"), &without));
}
/// **周快照 + 加载器**(M157 r3 复审 P2-1):装配门限必须按**继承链的 MC 根版本**判。
///
/// 造一个 Fabric 实例(id `26w14a-fabric-0.16.5`,继承周快照 `26w14a`),库表里有
/// `org.lwjgl:lwjgl-vulkan`:`game_version = Some("26w14a")` ⇒ 命令行带 `--graphicsBackend vulkan`;
/// 退回到「拿带加载器后缀的 version_id 当游戏版本」⇒ `GameVersion::is_weekly_snapshot`
/// 的 6 字符形态认不出来,参数被跳过(**负向锚点**:这正是复审复现出来的静默丢失)。
///
/// 抓得住:adapter 的 `game_version` 传错(调用方又回退成 `None`)——周快照 loader 实例
/// 「UI 说可用、命令行里没有」。
/// 抓不住:两个调用点自己有没有传(那由 presenter `host::launch::tests` 与
/// CLI `snapshot::tests` 各自的根版本断言守)。
#[test]
fn modded_weekly_snapshot_needs_the_root_version_for_the_gate() {
let version_id = "26w14a-fabric-0.16.5";
let libraries = [LibraryInput::new(
"C:/mc/libraries/org/lwjgl/lwjgl-vulkan/3.4.3/lwjgl-vulkan-3.4.3.jar",
"org.lwjgl:lwjgl-vulkan:3.4.3",
)];
/// **周快照 + 加载器**(M157 r3 复审 P2-1):装配门限必须按**继承链的 MC 根版本**判。
///
/// 造一个 Fabric 实例(id `26w14a-fabric-0.16.5`,继承周快照 `26w14a`),库表里有
/// `org.lwjgl:lwjgl-vulkan`:`game_version = Some("26w14a")` ⇒ 命令行带 `--graphicsBackend vulkan`;
/// 退回到「拿带加载器后缀的 version_id 当游戏版本」⇒ `GameVersion::is_weekly_snapshot`
/// 的 6 字符形态认不出来,参数被跳过(**负向锚点**:这正是复审复现出来的静默丢失)。
///
/// 抓得住:adapter 的 `game_version` 传错(调用方又回退成 `None`)——周快照 loader 实例
/// 「UI 说可用、命令行里没有」。
/// 抓不住:两个调用点自己有没有传(那由 presenter `host::launch::tests` 与
/// CLI `snapshot::tests` 各自的根版本断言守)。
#[test]
fn modded_weekly_snapshot_needs_the_root_version_for_the_gate() {
let version_id = "26w14a-fabric-0.16.5";
let libraries = [LibraryInput::new(
"C:/mc/libraries/org/lwjgl/lwjgl-vulkan/3.4.3/lwjgl-vulkan-3.4.3.jar",
"org.lwjgl:lwjgl-vulkan:3.4.3",
)];
for (game_version, expected) in [(Some("26w14a"), true), (None, false)] {
let snapshot = SnapshotInput {
game_version,
libraries: &libraries,
primary_jar: PathBuf::from("C:/mc/versions/x/x.jar"),
..SnapshotInput::minimal(version_id, "net.minecraft.client.main.Main")
};
let options = AdapterOptions {
check_classpath: false,
language: "zh-CN".to_string(),
..AdapterOptions::default()
};
let mut out = build_request(&snapshot, options).request;
let resolved = resolve(
Some(&LaunchOverrides {
graphics_backend: Some(GraphicsBackend::Vulkan),
..LaunchOverrides::default()
}),
&GlobalLaunchDefaults::default(),
);
apply(&mut out, &resolved);
let command = assemble(&out, &ctx()).expect("组装应成功");
let sent = command.args.iter().any(|arg| arg == "--graphicsBackend");
assert_eq!(
sent, expected,
"game_version={game_version:?} 时是否下发不对:{:?}",
command.args
);
let skipped = command
.warnings
.iter()
.any(|warning| matches!(warning, AssemblyWarning::GraphicsBackendSkipped { .. }));
assert_eq!(skipped, !expected, "跳过与否必须与下发相反(不静默)");
}
for (game_version, expected) in [(Some("26w14a"), true), (None, false)] {
let snapshot = SnapshotInput {
game_version,
libraries: &libraries,
primary_jar: PathBuf::from("C:/mc/versions/x/x.jar"),
..SnapshotInput::minimal(version_id, "net.minecraft.client.main.Main")
};
let options = AdapterOptions {
// `assemble` 要求 Java 可执行文件非空(`EmptyJavaPath`);adapter 默认是空路径,
// 所以这里显式给一个(原来这条用例从没被执行过,r4 把它提到模块层才暴露出来)。
java: JavaSelection::new("C:/java/bin/java.exe", 21, 64),
check_classpath: false,
language: "zh-CN".to_string(),
..AdapterOptions::default()
};
let mut out = build_request(&snapshot, options).request;
let resolved = resolve(
Some(&LaunchOverrides {
graphics_backend: Some(GraphicsBackend::Vulkan),
..LaunchOverrides::default()
}),
&GlobalLaunchDefaults::default(),
);
apply(&mut out, &resolved);
let command = assemble(&out, &ctx()).expect("组装应成功");
let sent = command.args.iter().any(|arg| arg == "--graphicsBackend");
assert_eq!(
sent, expected,
"game_version={game_version:?} 时是否下发不对:{:?}",
command.args
);
let skipped = command
.warnings
.iter()
.any(|warning| matches!(warning, AssemblyWarning::GraphicsBackendSkipped { .. }));
assert_eq!(skipped, !expected, "跳过与否必须与下发相反(不静默)");
}
}