refactor(cli): 判据收敛到 unlucky_cli::cli,banner 按被调用的二进制名自称(M82 复审)
去重:`looks_like_cli(args) -> bool` 落在 `unlucky_cli::cli`,两个 GUI 的 main.rs 只调用它, 判据从两份变一份。cli crate 里**不**出现 GUI 的 flag 表——语义仍是「首个 token 是裸词就接管; 首个 token 是 flag 时只有解析出真命令才接管,解析失败不接管」。原来两个 main.rs 里的 5+5 条 单测合并成 cli crate 的一份(用例集按复审要求原样搬,含 --screenshot/--renderer/--diff/ --mock/--force-state/--scale-factor、--help/-h/--version/-V、10 个已知子命令、--json 前置、 未知子命令),两个 main.rs 的旧测试已删除。 banner:新增 cli::program 模块,从 argv[0] 的 basename 取程序名(剥目录、剥 .exe、空值回落 ull),把帮助/版本/错误提示里独立出现的 `ull` 换成它——`unlucky-launcher --version` 不再自称 `ull`,也不会把人指去敲 `ull --help`。`run()` 签名未改;`ull` 自己跑时输出逐字不变(替换是 恒等),打包脚本的 `ull --version` 冒烟不受影响。
This commit is contained in:
1 parent
fecff989e7
commit
c9e6236a87
9 files changed
+275
-190
No files matched your search
@@ -11,7 +11,13 @@ fn version_json_has_os_summary() {
|
||||
assert_eq!(code, 0);
|
||||
let value = parse_json(&stdout);
|
||||
assert_eq!(value["ok"], true);
|
||||
assert_eq!(value["data"]["name"], "ull");
|
||||
// M82:自称的名字跟着被调用的二进制走(test harness 里是测试二进制名,`ull` 里是 `ull`);
|
||||
// argv[0] → 名字的映射由 cli::program 的单测钉死。
|
||||
assert_eq!(
|
||||
value["data"]["name"],
|
||||
unlucky_cli::cli::program::name(),
|
||||
"{stdout}"
|
||||
);
|
||||
assert_eq!(value["data"]["version"], env!("CARGO_PKG_VERSION"));
|
||||
// D19/D21:os 对象来自 core::platform::os_info(family + 两档 support)。
|
||||
assert!(value["data"]["os"]["family"].is_string());
|
||||
@@ -23,7 +29,9 @@ fn version_json_has_os_summary() {
|
||||
fn welcome_without_subcommand_prints_version_and_help() {
|
||||
let (code, stdout, _) = run_cli(&[]);
|
||||
assert_eq!(code, 0);
|
||||
assert!(stdout.contains("ull "), "{stdout}");
|
||||
// banner 用被调用的二进制名(M82),不写死 `ull`。
|
||||
let banner = format!("{} ", unlucky_cli::cli::program::name());
|
||||
assert!(stdout.starts_with(&banner), "{stdout}");
|
||||
assert!(stdout.contains("用法:"), "{stdout}");
|
||||
|
||||
let (code, stdout, _) = run_cli(&["--json"]);
|
||||
|
||||
Reference in new issue
Block a user