test(app-iced): accent 回车守卫改判代码行并整取实参(M252 r2 P2-1)
上一轮(e2a9692)声称三处守卫都改了,实际只有 field.rs 与 rows.rs 进了提交:
`section/accent.rs` 的改写留在工作树里,被我自己重放 C4 变异时的 `git checkout --`
还原掉了 —— 提交面因此看不到它,那条守卫仍是 `body.contains(..)`,注释掉接线后它照样绿
(只有白名单顺手红)。先修过程、再修判据:
- `the_accent_field_wires_enter_to_commit` 改成 `code_line(body, ".on_submit(")` 取**代码行**,
再用 `call_arguments` **整取**实参并断言等于 `["accent_commit"]` —— 顺带堵上
「`accent_commit_none` 这类同前缀产地静默通过」。
- `code_lines()` 的边界文档换成实测口径(`app-iced/src` 9 处 `r#"`、8 处内容含引号;
全仓 `crates/**.rs` 291 处),并写清两个方向:内嵌引号 ⇒ 尾部注释漏剥 ⇒ **假绿**;
JSON 原始字符串同行有 `//` ⇒ 多剥 ⇒ **假红**。两种都由 `code/tests.rs` 钉住。
过程纪律(写进报告):**变异重放只在已提交的树上做**,否则 `git checkout --` 会把未提交的
修复一起扔掉,而「声称改了、diff 没动」正是这次被复审抓到的形状。
This commit is contained in:
1 parent
a17f6fb29f
commit
9ce54a8119
3 files changed
+62
-23
No files matched your search
@@ -232,26 +232,40 @@ mod tests {
|
||||
/// 本文件源码(源码结构断言用,与 `pages/layout/source.rs` 同一条纪律)。
|
||||
const SOURCE: &str = include_str!("accent.rs");
|
||||
|
||||
/// **M252 / P18 回车接线的两条断言**:输入框接了 `on_submit`,且接的是「提交」那条消息。
|
||||
/// **M252 / P18 回车接线的判据**:`push` 里有一**行代码**接了 `on_submit`,实参整取等于
|
||||
/// `accent_commit`,且那个产地发的确实是 `AccentCommit`(提交)而不是 `Accent(原文)`(敲字)。
|
||||
///
|
||||
/// iced 的 `Element` 没有内省接口(见 `pages::layout::source` 的模块文档),所以「回车真的
|
||||
/// 按下去」在这里量不到——能钉住的是**它接的是哪条消息**:
|
||||
/// 按下去」在这里量不到——能钉住的是**它接的是哪条消息**。
|
||||
///
|
||||
/// - 抓得住:`.on_submit(..)` 被删掉(T27 反例);接成 `Change::Accent(原文)`(那是**逐键**
|
||||
/// 路径,`retry(false)` 会把已经亮起来的错吞回去,等于回车把错误擦掉);接成别的控件消息。
|
||||
/// - 抓得住:`.on_submit(..)` 被删掉 **或注释掉**(`source::code_line` 先剥注释,判的是**代码行**);
|
||||
/// 实参被换成同前缀的别的产地(`accent_commit_none`——`call_arguments` 是**整取**,不是子串);
|
||||
/// 接成 `Change::Accent(原文)`(那是**逐键**路径,`retry(false)` 会把已经亮起来的错吞回去)。
|
||||
/// - 抓不住:按键真的到达控件(iced 的 `Widget::update`)、以及红框/错行画没画(出图负责)。
|
||||
#[test]
|
||||
fn the_accent_field_wires_enter_to_commit() {
|
||||
let body = crate::pages::layout::source::function_body(SOURCE, "fn push");
|
||||
assert!(
|
||||
body.contains(".on_submit("),
|
||||
"强调色输入框没接回车(去掉接线这条必须红),实际函数体:\n{body}"
|
||||
let line =
|
||||
crate::pages::layout::source::code_line(body, ".on_submit(").unwrap_or_else(|| {
|
||||
panic!("`push` 里没有一行**代码**接 `on_submit`(注释掉也算没有):\n{body}")
|
||||
});
|
||||
|
||||
// 实参**整取**(不是子串):`accent_commit_none` 这种同前缀产地不许静默通过。
|
||||
assert_eq!(
|
||||
crate::pages::layout::source::call_arguments(&line, ".on_submit("),
|
||||
vec!["accent_commit"],
|
||||
"回车必须接 `accent_commit`(唯一产地),实际接线:{line}"
|
||||
);
|
||||
|
||||
// 产地本身发什么:先看**代码行**(注释里的字不算),再跑一次拿 `Debug` 文本核形态
|
||||
// (`Message` 没有 `PartialEq`)。
|
||||
let factory = crate::pages::layout::source::function_body(SOURCE, "fn accent_commit");
|
||||
assert!(
|
||||
body.contains("accent_commit"),
|
||||
"回车必须接 `accent_commit`(唯一产地),实际函数体:\n{body}"
|
||||
crate::pages::layout::source::code_lines(factory)
|
||||
.iter()
|
||||
.any(|line| line.contains("Change::AccentCommit")),
|
||||
"产地必须发 `Change::AccentCommit`(提交),实际函数体:\n{factory}"
|
||||
);
|
||||
// 那条产地发的到底是什么:`Message` 没有 `PartialEq`,比 `Debug` 文本(变体名 + 字段)。
|
||||
assert_eq!(
|
||||
format!("{:?}", super::accent_commit()),
|
||||
format!(
|
||||
|
||||
Reference in new issue
Block a user