- P2-1 判据恒绿:`gallery/probe/bases.rs` 的「反向检查」把字段档计数(`:172` 遮蔽后的
`hits`)拿去比按钮档 stray ⇒ 恒绿。改成 `button_hits` / `field_hits` 两个计数,各比各的
stray,失败信息的数值与单位对齐量测对象。变异自证:卡列里留一颗忘了 `.base(..)` 的按钮
⇒ 该断言单独红(2137 px vs 3178 px,退出码 101)。
- P2-2 FAB 的底错了:禁用态背景仍是满档 `PrimaryContainer`(`Disabled.layer() == None`),
38% 内容却合在画布上。改成 `Base::of(PrimaryContainer)` + `on_container = false`
(那一层 10% 在 FAB 身上不存在),两处调用收进一个 `content_color()`;新增值判据
`disabled_fab_ink_composites_over_its_own_container`(修前 #8CA0AA / 修后 #548FBC 量级)。
- P2-3 漏改:`selection::paint::state_layer()`(hover/focus/pressed)与 `list_item` 的
状态层叠底仍写死 `Role::Surface`,改成跟 `base`;同类两处(`assemble::transparent_state_color`
的 Outlined/Text hover、drawer 项药丸)一并跟上。
- P2-4 文档失真:`feedback/{action,mod}.rs` 删掉「本地 α 合成 / 规则只认两档」的旧描述
与失效链接;`list_item` 的旧签名;三处 `probe/base.rs` → `probe/bases.rs`;
新增 `surfaces::elevated::tests::the_card_base_constant_is_the_role_the_card_paints`
真断言(原来只在文档里声称那条测试守 `BASE`),并把这句描述改准。
- nit:`disabledbase.rs` 字符串里塌成一行的续行空格、probe 汇总行把列左缘横坐标说成
「像素计数」的措辞。
门禁(CARGO_TARGET_DIR=C:/Temp/ull-target/wt-234):fmt / check --all-targets /
test -p unlucky-app-iced(896 + 6 通过,0 失败)/ clippy --workspace --all-targets -D warnings /
文件 ≤400 全绿;probe 浅色与深色都过。
93 lines
2.9 KiB
Rust
93 lines
2.9 KiB
Rust
//! Chip 角色与状态层的单测(M234 从 `selection/tests.rs` 纯搬移,守 400 行硬线)。
|
||
//!
|
||
//! 搬移零改动:判据与注释一字未动,只是**换文件**(`tests.rs` 加了 `.base(..)` 之后到 422 行)。
|
||
|
||
use super::*;
|
||
|
||
/// §13.5 / §13.6 / §13.7:选中态**无描边**、Assist 不可选中、禁用文字 @38%。
|
||
#[test]
|
||
fn chip_roles_follow_the_tokens() {
|
||
let ui = ui();
|
||
let radius = ChipGeometry::of(&ui).radius;
|
||
|
||
let selected = paint::chip(
|
||
&ui,
|
||
Base::CANVAS,
|
||
ChipVariant::Filter,
|
||
true,
|
||
Interaction::Enabled,
|
||
radius,
|
||
);
|
||
assert_eq!(
|
||
selected.frame.fill,
|
||
Some(ui.color(Role::SecondaryContainer))
|
||
);
|
||
assert_eq!(selected.frame.outline, None, "13.5:选中描边 0dp");
|
||
assert_eq!(selected.label, ui.color(Role::OnSecondaryContainer));
|
||
|
||
let unselected = paint::chip(
|
||
&ui,
|
||
Base::CANVAS,
|
||
ChipVariant::Filter,
|
||
false,
|
||
Interaction::Enabled,
|
||
radius,
|
||
);
|
||
assert_eq!(
|
||
unselected.frame.outline,
|
||
Some(ui.color(Role::OutlineVariant))
|
||
);
|
||
assert_eq!(unselected.label, ui.color(Role::OnSurfaceVariant));
|
||
|
||
// Assist 没有选中态:即使传 selected = true 也不会变 SecondaryContainer
|
||
let assist = paint::chip(
|
||
&ui,
|
||
Base::CANVAS,
|
||
ChipVariant::Assist,
|
||
true,
|
||
Interaction::Enabled,
|
||
radius,
|
||
);
|
||
assert_ne!(assist.frame.fill, Some(ui.color(Role::SecondaryContainer)));
|
||
assert_eq!(
|
||
assist.icon,
|
||
ui.color(Role::Primary),
|
||
"13.4:Assist 前置图标 Primary"
|
||
);
|
||
|
||
let disabled = paint::chip(
|
||
&ui,
|
||
Base::CANVAS,
|
||
ChipVariant::Filter,
|
||
false,
|
||
Interaction::Disabled,
|
||
radius,
|
||
);
|
||
assert_ne!(disabled.label, unselected.label, "13.7:禁用文字降到 38%");
|
||
}
|
||
|
||
/// 状态层只在三态存在,且**不是**满档角色色(α 由 `interaction` 给)。
|
||
#[test]
|
||
fn state_layer_only_exists_on_lifted_states() {
|
||
let ui = ui();
|
||
for (state, expected) in [
|
||
(Interaction::Enabled, false),
|
||
(Interaction::Hovered, true),
|
||
(Interaction::Focused, true),
|
||
(Interaction::Pressed, true),
|
||
(Interaction::Disabled, false),
|
||
] {
|
||
let layer = paint::state_layer(&ui, Base::CANVAS, state, Role::OnSurfaceVariant);
|
||
assert_eq!(layer.is_some(), expected, "{state:?} 的状态层有无");
|
||
if let Some(color) = layer {
|
||
assert_eq!(color.a, 1.0, "状态层必须是实色(D27:CPU/GPU 一致)");
|
||
}
|
||
}
|
||
// 同态下 hover 比 pressed 浅(8% < 10%)
|
||
let hover =
|
||
paint::state_layer(&ui, Base::CANVAS, Interaction::Hovered, Role::OnSurface).unwrap();
|
||
let pressed =
|
||
paint::state_layer(&ui, Base::CANVAS, Interaction::Pressed, Role::OnSurface).unwrap();
|
||
assert_ne!(hover, pressed);
|
||
}
|