- 新增 tests/options_shot/feed.rs:四条断言共用一条「喂图」策略 · CI(CI 已设置)且 Windows 上缺 ULL_DL_*_SHOT ⇒ 失败并提示「守门未喂图」 · 非 Windows 上喂了图 ⇒ CI 里也失败(断言按 Segoe UI 标定的行高/墨迹宽度) · 本机缺图仍可跳过,但每次都留一句提示 - ci.yml 的 test 作业(Windows 槽):pages_demo 现出 ready700/chips700/compact736/wide1180 四张图 → 写进 $GITHUB_ENV → cargo test -p unlucky-app-iced --lib options_shot 出图与断言两步都带 if: runner.os == 'Windows';失败时上传四张图便于复盘 - 顺带订正五处文档数字:main 7 整行 / r1 4 整行 / r2 7 整行,并写清第 8 条墨迹是 hint (rows.rs ×3、options_shot/ready.rs、tests/view.rs),不动任何断言期望值
81 lines
3.9 KiB
Rust
81 lines
3.9 KiB
Rust
//! 「还没选版本」那一态(`ULL_DL_DEMO` 不设 = `ready`)的像素守门:r1 复审 P2-1。
|
||
//!
|
||
//! ## 为什么要单独守这一态
|
||
//!
|
||
//! M125 r1 的 `TailShare::of` **只判档位**,于是 chips 档的「刚进页面」也被五五分:
|
||
//! 面板里只有一行提示(`PanelState::Hint`,≈30px),却拿走一半高度 ⇒ 700×760 下
|
||
//! 只剩 **4 整行**可读、下半块留 ≈160px 空画布(main 那一态是 **7 整行**:不是 8,
|
||
//! 第 8 条墨迹其实是 `Pick a version, then install` 那句 hint,横向范围对不上版本号,
|
||
//! 而且 700×760 上放 8 行要 352px、实测只剩 309~322px。r2 修回 7 整行)。
|
||
//! 同目录 `chips.rs` 只拍「选中 + 选项区展开」,正是这个盲区把回归放了过去。
|
||
//!
|
||
//! 现在的判据:`Chips` **且**面板真占高度(`Options` / `Install`)才共享;
|
||
//! `Hint` 在任何档位都钉死(见 `rows::TailShare::of`)。
|
||
//!
|
||
//! ```text
|
||
//! # 不设 ULL_DL_DEMO(= ready)出 700×760 那张
|
||
//! cargo run -p unlucky-app-iced --example pages_demo -- \
|
||
//! --screen=download --width=700 --height=760 --screenshot=ready700.png \
|
||
//! --screenshot-theme=light --software-renderer
|
||
//! ULL_DL_READY_SHOT=ready700.png cargo test -p unlucky-app-iced --lib options_shot
|
||
//! ```
|
||
//!
|
||
//! 抓得住:①列表区 **≥ 6 整行**(数版本号那列的墨迹条数,行距 44);②尾部(提示那条
|
||
//! 分隔线)在 6 行之后——五五分时它落在第 4 行下方,两条都立刻红。
|
||
//! 抓不住:提示文案本身、hover/tooltip 层(静态图拍不到);也不管「选中且展开」那一态
|
||
//!(那是 `chips.rs` 的活)。
|
||
|
||
use super::{bands, feed, ui, Shot, READY_SHOT};
|
||
|
||
/// `ready` 那一态(700×760):8 个版本里至少 6 行要在屏,尾部提示不许把列表压扁。
|
||
///
|
||
/// 修前实测(M125 r1,`TailShare::of` 只判档位的版本):列表区 `374..559` = 185px = 4 行,
|
||
/// 版本号那列只有 4 条墨迹;面板那半块 185px 里只有一行 `Pick a version, then install`,
|
||
/// 其余是空白 —— 这条断言在那种图上是红的(4 < 6)。
|
||
#[test]
|
||
fn a_ready_shot_keeps_the_whole_visible_list() {
|
||
let Some(path) = feed(READY_SHOT) else {
|
||
return;
|
||
};
|
||
let shot = Shot::load(&path);
|
||
assert_eq!(shot.width, 700, "这条只认 700×760 那张(chips 档)");
|
||
|
||
let bands = bands(700.0);
|
||
let canvas = shot.at(bands.list.0 + 2, 12);
|
||
let metrics = ui().metrics();
|
||
let right = bands.list.0 + bands.list.1 as usize - 2;
|
||
|
||
// ① 第一行版本号的墨迹带(ready 态没有选中行,所以量的是**文本**而不是底色;
|
||
// x 取 `+100` 落在版本号那几个字上——`+60` 会落进「前置下载图标」与文字之间的空档)
|
||
let (first_ink, _) = shot
|
||
.first_filled_band(bands.list.0 + 100, 360, 440, canvas)
|
||
.expect("列表列里应当有版本行");
|
||
|
||
// ② 尾部(提示)上沿的分隔线:它上面的高度才是列表拿到的
|
||
let rule = shot
|
||
.first_rule_y(bands.list.0, right, first_ink, canvas)
|
||
.expect("找不到尾部那条分隔线(列表区的下界量不出来)");
|
||
|
||
// ③ 数得出几个版本号:8 行里至少 6 行在屏
|
||
let rows = shot.ink_bands(
|
||
bands.list.0 + 50,
|
||
bands.list.0 + 140,
|
||
first_ink,
|
||
rule,
|
||
canvas,
|
||
);
|
||
assert!(
|
||
rows >= 6,
|
||
"ready 态只读得出 {rows} 个版本号(要求 ≥ 6 个,演示数据共 8 个):\
|
||
面板那一行提示把列表对半切了(列表区 y={first_ink}..{rule},\
|
||
共 {}px,行高 {})",
|
||
rule - first_ink,
|
||
metrics.row_height
|
||
);
|
||
assert!(
|
||
(rule - first_ink) as f32 >= 6.0 * metrics.row_height - metrics.row_height / 2.0,
|
||
"ready 态的列表区只有 {}px(y={first_ink}..{rule}),不足 6 整行",
|
||
rule - first_ink
|
||
);
|
||
}
|