Files
ElyOffice/tasks/reviews/C07.3-r1.md
T

2.5 KiB
Raw Blame History

FAIL

crates/ely-lok/src/view/input.rs:166 — 剪切先通过 worker 执行 .uno:Cut(worker/input.rs:104),再写系统剪贴板;写入失败时,正文已经被删除。复现:选择 Hello 世界,仅向 clipboard::write 注入写失败,再执行 Input::Copy { cut: true };返回错误,保存后的段落为 [""]。失败时用户内容丢失,重试也失去原选区。修复方向:先取得复制数据并成功写入系统剪贴板,再删除选区;为写失败时正文和选区保留增加回归。

crates/ely-lok/src/view/input.rs:428 — IME 更新丢弃平台给出的组合内选区,selected_text_range 固定返回组合尾部(:397),text_for_range 固定返回 None(:383)。复现:在 GPUI 空窗口中调用 EntityInputHandler::replace_and_mark_text_in_range(None, "nihao", Some(2..2), ...),再查询选区及 0..2 的组合文本,实际得到 5..5 和 None。输入法移动组合内光标后,平台与编辑器的范围失同步。修复方向:保存并按 UTF-16 更新组合选区、处理替换范围、提供组合文本查询;通过这些平台回调验证组合内编辑。

crates/ely-lok/src/worker/input.rs:134 — 粘贴只检查 setClipboard,然后发送未请求结果通知的 .uno:Paste(ffi/document.rs:85)并回复成功;实际导入失败被吞掉。复现:使用已构建的固定引擎,向打开的 FODT 粘贴 MIME 为 image/png、数据为 b"this is not a png" 的载荷,worker 返回 OK;随后保存,文档保持 Hello 世界,<draw:image 数量为 0。输入队列因此也收不到失败。修复方向:检查支持格式的数据及实际内核粘贴结果,将解析或执行失败回传为错误,并增加合法 MIME 搭配损坏数据的回归。

crates/ely-lok/examples/lokview.rs:109 — 真窗口鼠标测试仅检查预先设好的焦点(:81),没有断言点击改变光标或拖动改变选区;IME 单测直接调用 compose(view/tests/input.rs:47),绕过平台 marked-text 回调,窗口脚本也只输入英文。复现:在隔离副本中移除 LokView::render 的全部鼠标处理器,并让 replace_and_mark_text_in_range 空执行,启用剪贴板的窗口脚本仍输出 ok: lokview,原有 39 项单测全部通过。鼠标桥和中文组合入口失效仍会通过验收。修复方向:从真实窗口事件和平台 IME 回调触发输入,分别断言文档光标、选区、组合更新、提交和取消的结果,并要求上述变异使相应测试失败。