test(app-iced): 接线守卫改判「代码行」,注释掉不再算接线(M252 r1 P1-1)
复审实测:三处接线守卫都是纯文本 `contains`,把真接线注释掉(行注释,或 `/*` 独占一行的 块注释)之后 943 条用例一条不红;`field.rs` 那处连 rustc 的 unused-variable 兜底也能用 `let _submit` 一起绕掉 —— 功能整条静默失效时,测试与 lint 两条线同时不响。 - `pages/layout/source/code.rs`(新):`code_lines()` 剥 `//` 与跨行/可嵌套 `/* … */`, 字符串与字符字面量整段保留(`"http://x"` 里的 `//` 不剥);`code_line()` / `has_code_line()` 给「某行代码的行首就是那个调用」这条谓词。边界写在模块文档:原始字符串里出现 `"` 是唯一 可能朝松方向错的形态(本仓 src 现无此写法),其余偏差都是假红。 - 三处守卫改用它:`text_field_forwards_the_submit_callback`(行首是 `on_submit_maybe(` 且实参不是 `None`、消息来自 `submit_message`)、`the_rename_field_wires_enter`(回车与 「改名」按钮的行都含 `commit_rename()`,且都不含第二种页面意图 —— 一并关掉 r1 P2-1 「Debug 自证撑不住判据」)、`the_accent_field_wires_enter_to_commit`(含产地那条代码行)。 - `submit_is_wired_only_at_the_two_call_sites` 的 `scan()` 换成同一谓词并跳过测试文件 (守卫自己的 fixture 里也有 `.on_submit(` 样本)。 - T29 顺手收敛 scope 内的同族旧断言:`pages/instances/tests.rs` 的行距/散文接线判据与 `pages/instances/tests/i18n.rs` 的五条取词判据改走 `code_text()`(一行改动、方向不变)。
This commit is contained in:
1 parent
92a3c1bbc8
commit
a17f6fb29f
7 files changed
+464
-45
No files matched your search
@@ -98,27 +98,32 @@ fn list_column_spaces_rows_only_from_the_shared_constant() {
|
||||
let rows_chain = source::statement(file, "let mut rows = column(");
|
||||
|
||||
assert!(
|
||||
body.contains("ROW_SPACING"),
|
||||
"列表行距必须从 ROW_SPACING 取,不许另写:\n{body}"
|
||||
source::code_text(&body).contains("ROW_SPACING"),
|
||||
"列表行距必须从 ROW_SPACING 取(注释里写不算),不许另写:\n{body}"
|
||||
);
|
||||
assert!(
|
||||
body.contains("LIST_BOTTOM_INSET"),
|
||||
"底部内缩必须从 LIST_BOTTOM_INSET 取:\n{body}"
|
||||
source::code_text(&body).contains("LIST_BOTTOM_INSET"),
|
||||
"底部内缩必须从 LIST_BOTTOM_INSET 取(注释里写不算):\n{body}"
|
||||
);
|
||||
|
||||
// ① 行容器的构建链上不许叠间距(`column![head, scroller]` 上的合法间距不在这条链里)
|
||||
// ① 行容器的构建链上不许叠间距(`column![head, scroller]` 上的合法间距不在这条链里)。
|
||||
// 判据走「代码行」(`source::code_text` 剥注释):注释掉的 `.spacing(..)` 等于没有间距。
|
||||
assert!(
|
||||
!rows_chain.contains(".spacing("),
|
||||
!source::code_text(rows_chain).contains(".spacing("),
|
||||
"行容器的构建链上又出现了间距(M102 ② 的页级附加量):\n{rows_chain}"
|
||||
);
|
||||
|
||||
// ② 语句序列:每一处 `rows.spacing(…)` 的实参都必须**顺绑定追回 `ROW_SPACING`**
|
||||
// (直接用它、或 `let spacing = ROW_SPACING` 再中转都算;先 `let extra = Space::X1;`
|
||||
// 再 `rows.spacing(ui.space(extra))` 则红——r4 复审的变异 M4)
|
||||
//
|
||||
// 判据走**代码文本**(`source::code_text` 剥注释):注释掉的 `rows.spacing(..)` 不算「应用了间距」,
|
||||
// 否则把那一行注释掉整条用例会绿着通过(T29 的同族退化)。
|
||||
let body = source::code_text(&body);
|
||||
let applied = source::call_arguments(&body, "rows.spacing(");
|
||||
assert!(
|
||||
!applied.is_empty(),
|
||||
"`list_column()` 里没有把 ROW_SPACING 应用到行容器的调用:\n{body}"
|
||||
"`list_column()` 里没有把 ROW_SPACING 应用到行容器的调用(注释掉也算没有):\n{body}"
|
||||
);
|
||||
for argument in &applied {
|
||||
let ident = argument
|
||||
@@ -155,11 +160,11 @@ fn the_detail_note_goes_through_the_prose_box() {
|
||||
let body = source::function_body(include_str!("../instances/detail.rs"), "fn push_text");
|
||||
|
||||
assert!(
|
||||
body.contains("frame::prose("),
|
||||
"正文段没有走 frame::prose:\n{body}"
|
||||
source::code_text(body).contains("frame::prose("),
|
||||
"正文段没有走 frame::prose(注释里写不算):\n{body}"
|
||||
);
|
||||
assert!(
|
||||
!body.contains("frame::body("),
|
||||
!source::code_text(body).contains("frame::body("),
|
||||
"正文段被塞进了整页块(会失去 72 字符行宽承诺):\n{body}"
|
||||
);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user