fix(core): LiteLoader 快照仓固定为 repo.mumfrey.com/snapshots(1.10.2 的 repo.url 是 /repo/ 形态,照它会 404)

This commit is contained in:
AskaEth committed 2026-11-10 19:34:10 +08:00
1 parent 944b1610c8
commit 7ed954f7fa
5 files changed
+164 -12

No files matched your search

+66
View File
@@ -172,3 +172,69 @@ fn stacks_on_forge_and_keeps_the_forge_tweak_class() {
.expect("缺 LiteLoader 本体库");
assert!(forge_lib < liteloader_lib, "{libraries:?}");
}
/// **新式 args 的父链**:父版本用 `arguments.game`(没有 `minecraftArguments`)。
///
/// 现实里 LiteLoader 只到 1.12.2,碰不到这种父版本;但「追加语义」是这套路线的准入条件,
/// 两种父版本形状都得钉住——否则哪天上游把老版本清单改成新式,我们会静默丢参数。
/// 这里用一份**手工夹具**(`--launchTarget forgeclient` 是 Forge 1.13+ 的真实形态)说明:
/// 父层参数在前、LiteLoader 的 tweakClass 在后,中间不互相覆盖。
#[test]
fn new_style_parent_args_are_appended_not_replaced() {
const MODERN_PARENT: &str = r#"{
"id": "1.12.2-modern-1.0",
"inheritsFrom": "1.12.2",
"mainClass": "net.minecraft.launchwrapper.Launch",
"arguments": {"game": ["--launchTarget", "forgeclient"], "jvm": ["-Dmodern=1"]},
"libraries": [{"name": "example:modern:1.0", "url": "https://example.invalid/"}]
}"#;
let temp = TempDir::new("modern-args");
let layout = GameLayout::new(temp.path());
put_version(&layout, "1.12.2", VANILLA_1122);
put_version(&layout, "1.12.2-modern-1.0", MODERN_PARENT);
let release = liteloader_release("1.12.2-modern-1.0");
let plan = LoaderInstallPlan::build(LoaderPlanInput {
layout: &layout,
release: &release,
environment: &Environment::host(),
parent_installed: true,
})
.expect("计划应可组");
let engine = engine(temp.path());
prefill(&plan.install);
let report = block_on(execute(&engine, &plan.install, 4, None)).expect("执行应成功");
assert!(report.is_complete(), "{:?}", report.failures(3));
let mut source = std::collections::BTreeMap::new();
source.insert("1.12.2".to_string(), read_version(&layout, "1.12.2"));
source.insert(
"1.12.2-modern-1.0".to_string(),
read_version(&layout, "1.12.2-modern-1.0"),
);
source.insert(
release.version_id.clone(),
read_version(&layout, &release.version_id),
);
let resolved = resolve(&source, &source[&release.version_id]).expect("三层继承应可解析");
// 父层用的是新式参数:子层没有把 legacy 串写进来,继承后仍然没有。
assert!(resolved.minecraft_arguments.is_none());
let game = resolved
.arguments
.as_ref()
.expect("arguments")
.expand(&Environment::host())
.game;
let assert_order = |needle: &str| {
game.iter()
.position(|token| token == needle)
.unwrap_or_else(|| panic!("缺 `{needle}`:{game:?}"))
};
assert!(
assert_order("forgeclient")
< assert_order("com.mumfrey.liteloader.launch.LiteLoaderTweaker"),
"父层参数必须在前:{game:?}"
);
}