r3 复审:那段「仍然共享」的成本数字与代码事实不符(三条填页线据此取 scope,故按 p1 处理)。 本轮**只改文档/注释**,无产品代码与测试逻辑改动(唯一非注释改动是 t2 断言的 message 字符串)。 - 第 4 条「读页外真值」:`States` 没有 `Default`,加字段会让 4 处 struct literal 全部 E0063 (`pages/mod.rs:154/177/232` + `app/view.rs:70`)⇒ 把 model 塞进 `States` 是 **3 个共享文件** (含 M104 的落点 `app/view.rs`);改推「给 `settings::view` 加 `model` 形参」这个**真·2 个文件** 的形状。并订正「在 `app/state.rs` 用真值初始化(1 个文件)」——今天没有语言真值源 (`AppearancePrefs` 无 language 字段,唯一值是 `app/view.rs:128` 硬编码 `Lang::En`)。 - 第 5 条第 ② 条路(改 `Body` 返回 `Task`)**删掉**:`settings::view` → `pages::render` → `App::view` 一路返回 `Element`(iced 0.14 的 view 亦然,且 `view(&self)` 改不了状态),view 期间产出的 `Task` 没有出口;真做要 `settings/mod.rs` + `pages/mod.rs` + `app/view.rs` 三处且另造旁路,明确写「不建议」。 只留第 ① 条(`app/update.rs` 的 `Message::Boot` → `on_boot`,1 个文件)。 - 第 6 条与 `state.rs::demo_groups` 文档:「harness 侧改两处」→ **三处** (`pages/mod.rs` 的 `page` / `page_with_appearance` / `app_with_appearance`,行 156/179/234)。 - p3:`message.rs` 里守门路径改成 `app/update/settings/tests.rs`(并点名 `settings.rs` 只是 mod 声明点); `appearance_section.rs` 的「绞线」错字改「绊线」;断言 message 的 `Some(appearance::body)` 改成源码 实际的 `Some(body)`(本地 fn);`app/update/settings/tests.rs` 的「抓不住 #2」改成两种洞分开说 (`|` 续行放行;花括号形状的多行 pattern 是**静默跳过**,不是误红)。
53 lines
2.6 KiB
Rust
53 lines
2.6 KiB
Rust
//! 「Appearance」分组自己的断言(M100 **新增**:`settings/tests.rs` 那 7 条全是跨 section 的,
|
||
//! 一条 section 断言都没有;这 3 条是新增,不是搬移)。
|
||
//!
|
||
//! **归 language+appearance 线**:这是设置页唯一接了真控件的一组,真控件实现全在
|
||
//! `pages/appearance/section.rs`;本文件只守「注册表这一侧的接线」。
|
||
//! 本组已经把 `body` 接上了;`tests/mod.rs` 那条「只有一组有真控件」的**聚合绊线已在 M101 r2 删除**
|
||
//! (被四条 per-group 断言完全蕴含——代价是「唯一性」从此没人守,那段说明写在 `tests/mod.rs` 同处)。
|
||
|
||
use super::super::appearance;
|
||
use unlucky_design::icons::IconKind;
|
||
|
||
/// 这一组的**演示行**(没有外观运行期状态时才画)。
|
||
///
|
||
/// 抓得住:四条线并行合并时把别人的行粘到本文件(四份 `GROUP` 长得几乎一样);
|
||
/// 漏掉/多一条行;标签与值错位。
|
||
/// 抓不住:真控件那一屏(那是 `pages/appearance` 的事,靠出图判)。
|
||
#[test]
|
||
fn the_appearance_group_shows_density_corner_motion_and_text_scale() {
|
||
let rows: Vec<(&str, &str)> = appearance::GROUP.rows.to_vec();
|
||
assert_eq!(
|
||
rows,
|
||
vec![
|
||
("Density", "Comfortable"),
|
||
("Corner style", "Rounded"),
|
||
("Motion", "Full"),
|
||
("Text scale", "100%"),
|
||
]
|
||
);
|
||
}
|
||
|
||
/// 左列图标(`IconKind::Sidebar`)。
|
||
#[test]
|
||
fn the_appearance_group_keeps_its_icon() {
|
||
assert_eq!(appearance::GROUP.icon, IconKind::Sidebar);
|
||
}
|
||
|
||
/// **本组的绊线**:外观分组必须一直是「挂了真控件」的那一组。
|
||
///
|
||
/// 抓得住:language+appearance 线把 `body` 换回 `None`(真控件消失、退回演示行,而截图对这种
|
||
/// 「只在有外观状态时出现」的差别不一定抓得住)。
|
||
/// 抓不住:`body` 到底指向哪个渲染器——**函数指针相等性断言不了**(rustc
|
||
/// `unpredictable_function_pointer_comparisons`:fn 地址不保证唯一,比出来的结果没有意义),
|
||
/// 所以「指向 `pages::appearance::section`」这件事只能由
|
||
/// `settings/appearance.rs` 那一行源码 + 两张图的 sha256 不同来担保。
|
||
#[test]
|
||
fn the_appearance_group_keeps_a_real_control_body() {
|
||
assert!(
|
||
appearance::GROUP.body.is_some(),
|
||
"外观分组必须是挂了真控件的那一组(`settings/appearance.rs` 里是 `body: Some(body)`,\
|
||
`body` 是本文件那个本地 fn;具体渲染器由那一行源码 + 截图担保,函数指针相等性断言不了)"
|
||
);
|
||
}
|