fix(app-iced): 复审 r1 三条(在飞守卫补 Back/Target、预检按版本过期、shell 文档如实)
P2-1(行为):`Busy::Importing` 的早退只盖了 Close。「返回」会派 Scan、「换目标档」会派 零写盘 Preview,两条都把 `adopt_epoch` +1,于是在飞的 Confirm 交卷时 Done 被代次丢掉—— 实例写进去了,界面什么都没说(正是 Close 守卫要防的形状)。两处补同款早退,且守卫写在 改本地状态**之前**:挡下来的换档不该把界面改成 B 档而盘上写的是 A 档。 P2-2(显示陈旧):`Form::fresh_plan` 原来只按目标档过期。先选 1.20.1 + 版本目录档,再改选 1.19.4,目标档没变,旧预检的 notes(说的是 `versions/1.20.1`)会继续当新版本的后果原文画。 现在连 `plan.version_id == selected` 一起判;没选中版本时也返回 None。同处那句 「版本一致性由 Self::candidate 那一路保证(选中即重扫)」与代码不符(Select 只改本地字段、 不发命令),改成如实说明过期判定只能在这里做。 P2-3(文档):`app/adopt/shell.rs` 的「纯搬移:函数体一行未改」不成立——同一提交里卡壳几何、 页脚去重、预览摘要都改过。改成逐条列出改了什么与为什么。 用例(两条都是先写红再修,红时 panic 信息就是错在哪): - back_and_target_are_ignored_while_the_registration_is_in_flight(记账后端断言「不许派 Scan / 不许派 Preview」);红:`登记在飞时 Back 不许派 Scan(会把 Done 的代次顶掉)`; - fresh_plan_expires_when_the_selected_version_changes;红:`换了版本之后旧预检必须过期 (否则画的是 1.20.1 的后果原文)`。 顺带补图:`ULL_ADOPT_STATE` 加 `pick-selected` 一档(选中行底色 + 预检启用态), 出图 `DevDocs/artifacts/m223/adopt-pick-selected-light.png`(r1 复审说这格只有代码没截图)。
This commit is contained in:
1 parent
6ffbd51f60
commit
fa3fab9086
5 files changed
+183
-8
No files matched your search
@@ -243,3 +243,45 @@ fn a_foreign_target_shows_its_notes_without_jumping_to_confirm() {
|
||||
form.target = AdoptTargetView::VersionDir;
|
||||
assert!(form.fresh_plan(&state).is_none(), "过期的预检不许画");
|
||||
}
|
||||
|
||||
/// **P2-2**:`fresh_plan` 必须按**版本 id** 过期,不只是目标档。
|
||||
///
|
||||
/// 场景:先选 1.20.1 + 版本目录档(notes 说 `versions/1.20.1`),再改选 1.19.4——目标档没变,
|
||||
/// 旧的预检结果若不按版本过滤就会继续当「这个版本的后果原文」画出来,那是一句假话。
|
||||
///
|
||||
/// 抓得住:`fresh_plan` 只看 `plan.target == self.target`(第一次修法就是这样漏的)。
|
||||
/// 抓不住:core 真的会不会为 1.19.4 算出同一段 notes(那是 `target_notes()` 的活)。
|
||||
#[test]
|
||||
fn fresh_plan_expires_when_the_selected_version_changes() {
|
||||
let mut state = state_with_scan();
|
||||
state.apply(AdoptEvent::Planned(Box::new(AdoptPlanView {
|
||||
version_id: "1.20.1".to_string(),
|
||||
name: "1.20.1".to_string(),
|
||||
target: AdoptTargetView::VersionDir,
|
||||
isolation: AdoptIsolationView::Isolated,
|
||||
run_dir: std::path::PathBuf::from("/game/versions/1.20.1"),
|
||||
notes: vec!["运行目录 = 版本目录 /game/versions/1.20.1".to_string()],
|
||||
})));
|
||||
|
||||
let mut form = Form {
|
||||
open: true,
|
||||
selected: Some("1.20.1".to_string()),
|
||||
target: AdoptTargetView::VersionDir,
|
||||
checked: true,
|
||||
..Form::default()
|
||||
};
|
||||
assert!(
|
||||
form.fresh_plan(&state).is_some(),
|
||||
"对得上版本与目标档时应当可读"
|
||||
);
|
||||
|
||||
// 改选另一个版本:目标档没变,但旧预检说的是别的版本的目录
|
||||
form.selected = Some("1.19.4".to_string());
|
||||
assert!(
|
||||
form.fresh_plan(&state).is_none(),
|
||||
"换了版本之后旧预检必须过期(否则画的是 1.20.1 的后果原文)"
|
||||
);
|
||||
// 没选版本时同样不该画(`None` = 没有任何版本的预检可言)
|
||||
form.selected = None;
|
||||
assert!(form.fresh_plan(&state).is_none());
|
||||
}
|
||||
Reference in new issue
Block a user