docs(core): inherit::merge 里写清 minecraftArguments(子覆盖父)与 arguments.game(追加)的区别
M222 的准入条件就是这条;不给结论留档,下一个人还会以为「叠一层」随便往哪个字段写都行。
This commit is contained in:
1 parent
c311032080
commit
51ea32284d
2 files changed
+59
No files matched your search
@@ -238,3 +238,52 @@ fn new_style_parent_args_are_appended_not_replaced() {
|
||||
"父层参数必须在前:{game:?}"
|
||||
);
|
||||
}
|
||||
|
||||
/// LiteLoader 生效所依赖的**两条继承合并律**(M222 第一步核实,直接钉在合并函数上)。
|
||||
///
|
||||
/// 1. `arguments.game`:父在前、子在后**追加**(所以 tweakClass 能叠在父链参数之后);
|
||||
/// 2. `minecraftArguments`:**子覆盖父**(所以 loader 层绝不能写它,否则父链的 tweakClass
|
||||
/// 整串消失)。
|
||||
///
|
||||
/// 抓得住:有人把 `minecraftArguments` 改成追加(HMCL/原版语义不是这样),或把
|
||||
/// `arguments.game` 改成整体替换(LiteLoader/其它叠层加载器当场失效)。
|
||||
/// 抓不住:真实启动 argv 的顺序(那是 `launch::game_args` 的第 24/25 项,
|
||||
/// 由 `tests/launch/cmdline_snapshot.rs` 钉住;本 mission 没有改那一层)。
|
||||
#[test]
|
||||
fn merge_laws_liteloader_depends_on() {
|
||||
use unlucky_core::game::inherit::merge;
|
||||
use unlucky_core::game::manifest::VersionJson;
|
||||
|
||||
let parse = |json: &str| VersionJson::from_json_str(json).expect("夹具应可解析");
|
||||
|
||||
let parent = parse(
|
||||
r#"{"id":"p","minecraftArguments":"--tweakClass FMLTweaker","arguments":{"game":["--parent"]}}"#,
|
||||
);
|
||||
let child = parse(r#"{"id":"c","arguments":{"game":["--child"]}}"#);
|
||||
let merged = merge(&child, &parent);
|
||||
assert_eq!(
|
||||
merged.minecraft_arguments.as_deref(),
|
||||
Some("--tweakClass FMLTweaker"),
|
||||
"子没写就继承父(这条是「叠在 Forge 上」的前提)"
|
||||
);
|
||||
let game: Vec<String> = merged
|
||||
.arguments
|
||||
.as_ref()
|
||||
.expect("arguments")
|
||||
.expand(&Environment::host())
|
||||
.game;
|
||||
assert_eq!(
|
||||
game,
|
||||
["--parent", "--child"],
|
||||
"arguments.game 是父在前、子在后追加"
|
||||
);
|
||||
|
||||
// 子写了 minecraftArguments:整串替换(不是追加)。
|
||||
let loud_child = parse(r#"{"id":"c2","minecraftArguments":"--tweakClass LiteLoaderTweaker"}"#);
|
||||
let merged = merge(&loud_child, &parent);
|
||||
assert_eq!(
|
||||
merged.minecraft_arguments.as_deref(),
|
||||
Some("--tweakClass LiteLoaderTweaker"),
|
||||
"子覆盖父:这正是 loader 层不许写 minecraftArguments 的原因"
|
||||
);
|
||||
}
|
||||
Reference in new issue
Block a user