测试契约摘录:TC-DISP-*(Arden · R12)
www 工作副本 · M5 摘录(Arden · 2026-10-21 Asia/Shanghai)
双轨:本页为 test-contracts.md §11 的 www 摘录(仅 TC-DISP-01…12 / S13)。完整 TC-* 表仍在 mvdocs;整篇迁入属编排波以后——本波不开 toolflow / host-integration / 完整 test-contracts。
语义权威:image-display.md;显示契约仅 C#;勿与 T15 R10(C++ UI·已关闭)互替。停止矩阵权威仍为 toolflow §7.4.3(T9,不改)。
实现对拍:见下文;对照 tipe46c042(已提交;Arden 不改include//src//bindings/)。
相关:csharp-binding · 控件对照 · TC-ACQ · 预览 http://127.0.0.1:8792
11. 显示集成 TC-DISP-*(阶段 F · Arden · R12)
语义权威见 image-display.md。显示契约仅 C#(控件封装 / UI 层);像素经绑定自 C++
vyntek::imaging。勿写成 C++ UI。本表只做可勾选断言。不改 Diagnostic / T9 停止矩阵与 toolflow v1.9。场景骨架 S13。交叉:显示只观察见TC-CTL-05(不扩 T9)。
| ID | 勾 | 前置 | 动作 | 期望 code / 状态 | 对应章节 | 场景 |
|---|---|---|---|---|---|---|
| TC-DISP-01 | [ ] | UI 线程;合法 IPixelImage(稳定或可写) | SetImage / Source 登记 | 同步取得独立 Share 并返回 ImageDisplayUpdate;不承诺已 OpenRead/已安装;可写输入须后台授予时才捕获 | image-display「请求登记与读取授予」 | S13 |
| TC-DISP-02 | [ ] | 调用方持有有效图像;可多控件同图 | SetImage 成功后调用方 Dispose/Close 自有 handle;或另一控件再 SetImage 同图 | 控件 不接管、不 Dispose 调用方传入 handle;Source 仅引用非所有权转移;Share 延长稳定内容寿命 | image-display「多窗口与所有权」 | S13 |
| TC-DISP-03 | [ ] | 已以 RetainInput(默认)安装可写原图 | 企图对同一 Buffer 原地 OpenWrite / 写入 | 显示快照持稳定读 → 原地写入等待控件及其他读者退出;属性改 InputRetention 不偷偷改当前已装内容存储 | image-display「输入保留与显示副本」 | S13 |
| TC-DISP-04 | [ ] | 以 Snapshot 提交并完成安装 | 等待 InputReleased 后对原图写入;屏幕仍可显示旧图 | InputReleased 后控件不再阻止原图写入;Source 不因释放而置空;刷新须再次 SetImage | image-display「输入保留与显示副本」 | S13 |
| TC-DISP-05 | [ ] | 当前为 RetainInput 已装 / 或在途候选 | update.DetachInputAsync;含预算不足路径 | 成功 → Released 且 InputReleased 已完成,公开 CurrentImageInfo/CurrentVersion 保持来源身份;CpuBudgetExceeded → 不破坏当前内容及原图读取,可重试 | image-display「脱离和清空」 | S13 |
| TC-DISP-06 | [ ] | 一次成功/失败更新在途 | 分别观察 Completion、InputReleased、ImageRendered、底层 ReturnCompleted | 四信号互不等价:Installed ≠ Rendered;InputReleased 可先/后于 Completion;ImageRendered 可重复或从未发生;ReturnCompleted 属 SDK/owner 归还,≠ 控件 InputReleased | image-display「回执、绘制和输入释放」 | S13 |
| TC-DISP-07 | [ ] | 控件已有已装旧画面 | 新请求 Failed(含 VersionMismatch / ReadFailed / UnsupportedImage 等) | 保留旧画面;失败回执 Info/Version 为空、带 Failure;不得让新 Source 信息与旧画面混合 | image-display「内部显示快照」/「回执」 | S13 |
| TC-DISP-08 | [ ] | 当前已装 Gray8 / Rgb24 / Bgr24 / Depth16 之一 | TryGetPixel → TryGetGray8/Rgb24/Bgr24/Depth16 | 仅格式相符时成功;无隐式跨格式转换;Depth 无效码仍可 TryGetDepth16(IsValid=false);TryGetDepthMeters 仅尺度已声明且有效时成功 | image-display「多格式像素查询」 | S13 |
| TC-DISP-09 | [ ] | 已装含 ROI 偏移和/或负步长的图像 | TryGetPixel(viewPosition, …) | 按控件逆变换到逻辑像素坐标(ROI 内 X/Y);负步长/ROI 由临时读取封装处理;禁止用 viewPosition 直接作缓冲偏移;界外 → false | image-display「多格式像素查询与坐标」 | S13 |
| TC-DISP-10 | [ ] | 有在途候选/已装内容;含隐藏或零尺寸 | 卸载控件;随后重挂载仍有效 Source;或图形 context 重建 | 卸载:取消候选、清 UI 快照、通知 render 退出,安全排空异步完成(不 UI 同步死等);重挂载 = 新请求,不复用已失效读取;context 重建从显示副本/快照恢复,不改公开来源身份 | image-display「内部显示快照」/「多格式渲染」 | S13 |
| TC-DISP-11 | [ ] | 已装旧图;新请求将超 CPU/GPU 预算 | SetImage / Snapshot 复制 / Detach 复制致预算不足 | 登记 Failed(如 CpuBudgetExceeded);释放本次取得的引用;保留旧画面;不先丢旧图凑预算;无自动重试队列 | image-display「预算、线程与资源归还」 | S13 |
| TC-DISP-12 | [ ] | Run 在途或已结束;显示已挂 | 卸图 / ClearImageAsync / Dispose ImageDisplay / 关显示宿主 | 显示只观察:不停编排、不 RequestCancel、不停相机(交叉升格/对齐 TC-CTL-05;不扩 T9) | image-display 文首 T9;toolflow §7.4.3;TC-CTL-05 | S13 / S05 / S07 |
实现对拍状态(tip e46c042 · 按实 · 可勾选处)
上表
[ ]保持未勾。外形 ≠ 验收。bindings tip769d997。
| TC | 声明外形(bindings · HEAD) | 实现对拍状态 | 缺口归属 |
|---|---|---|---|
| TC-DISP-01 | SetImage → Share → 后台 OpenRead → ImageDisplayUpdate | 管线外形有;未标验收 | Rhett |
| TC-DISP-02 | Share 不接管调用方;Dispose 调用方 ≠ Dispose 控件 share | 路径在;多控件同图 未验收 | Rhett |
| TC-DISP-03/04 | InputRetention RetainInput / Snapshot + InputReleased | 枚举与安装路径在;时序 未验收 | Rhett |
| TC-DISP-05 | DetachInputAsync;RetainInput 复制可 CpuBudgetExceeded | 预算失败路径有;成功脱离 未验收 | Rhett |
| TC-DISP-06 | 四回执分开;不假 ReturnCompleted;无头不发 ImageRendered | 约定在代码;时序 未验收 | Rhett · Bruno |
| TC-DISP-07 | OpenRead 失败释放候选、保留已装帧 | 路径在;未验收 | Rhett |
| TC-DISP-08 | TryGet* 仅格式相符;Depth16 IsValid 来自 native | 逻辑坐标外形有;未验收 | Rhett |
| TC-DISP-09 | TryGet*AtView + Origin;负步长只作元数据 | 映射外形有;未验收 | Rhett |
| TC-DISP-10 | Unload 清快照留 Source;Remount 新请求 | 外形有;无图形 context | Rhett |
| TC-DISP-11 | CpuBudgetLimitBytes;失败保留旧画面 | 账本外形有;未验收 | Rhett |
| TC-DISP-12 | Clear/Dispose/Unload 不 RequestCancel | 控件路径观察-only;宿主交叉未测 | Rhett · Chase |
场景骨架 S13(完整文仍在 mvdocs examples-scenarios):
| S13 | TC-DISP-01…12;交叉 TC-CTL-05 | 登记≠授予;Share 不接管;Retain/Snapshot/Detach;四回执;失败保留;四格式;ROI;卸载;预算;显示只观察 | S13;image-display;Arden · R12(仅 C#;≠ T15 R10) |
摘录状态:2026-10-21 Asia/Shanghai · bindings tip 769d997。完整 test-contracts / toolflow / host-integration 不在本波。