14 lines
3.6 KiB
Markdown
14 lines
3.6 KiB
Markdown
FAIL
|
|
|
|
crates/ely-files/src/session.rs:328 — 上轮路径解析错误问题仍有遗漏:`NotFound` 被转换为路径键并登记成功。隔离测试中,打开缺失文件得到 `Ok(Fresh(0))`;打开真实文件后删除它,再检查和打开,分别得到 `Ok(false)`、`Ok(Fresh(1))`,原登记仍存在。悬空符号链接测试已通过,但普通缺失路径的错误仍被吞掉;现有 `a_missing_path_registers_as_a_new_file` 还把这一行为写成预期。修复方向:向 `open()`、`is_open()` 的调用方传播解析失败,失败时保持登记不变;新建文件走无隐含目标路径的流程,并补充缺失、删除后的回归测试。
|
|
|
|
crates/ely-files/src/session.rs:320 — 上轮硬链接去重只修复了 Unix 分支,Windows 仍以规范化路径作为身份。同一文件的两个硬链接具有不同路径,依次打开会登记两个可写会话,违反 §6.1。抽取当前非 Unix `identity()` 原样在本机运行硬链接测试,两个键确实不同;Windows 目标的交叉检查通过,但报告 `Key::File` 从未构造,现有硬链接测试也被 `#[cfg(unix)]` 排除。修复方向:Windows 分支使用卷与文件身份去重,并让硬链接回归测试覆盖 Windows。
|
|
|
|
crates/ely-files/src/session.rs:315 — Unix 去重键只保存首次打开时的设备号和 inode,原子替换后同一路径失去已有会话关联,违反 §6.1。隔离测试先打开 `doc.md`,再通过临时文件加 `rename()` 替换它;随后 `is_open(doc.md)` 返回 `false`,再次打开得到 `Fresh(1)`,预期为 `Focus(0)`。正常原子保存或外部编辑器的原子替换都会触发两个可写会话。修复方向:保留规范化路径与文件身份的关联,在保存或替换后刷新身份,同时保留硬链接去重,并加入真实原子替换测试。
|
|
|
|
crates/ely-files/src/session.rs:208 — `begin_save_overwrite()` 直接生成票据,绕过只读、加载中及保存中的限制。隔离测试对 `Session::read_only(path)` 调用此方法,取得票据并完成保存后,状态变成 `Saved`,后续普通 `begin_save()` 也返回成功;§6.1 的只读视图因此获得持续写权限。上轮只读重载复现已通过,当前测试只检查普通保存入口。修复方向:所有保存入口共同维护访问模式与任务状态,覆盖确认仅解除外部冲突限制,并覆盖只读、加载中和已有保存任务的拒绝路径。
|
|
|
|
crates/ely-files/src/session.rs:183 — 未解决的外部修改会被普通状态转换清除,破坏 FILE-02 的状态表示与冲突保存守卫。隔离测试执行外部写入、`external_modified()`、`edit()` 后,状态变成 `Dirty`,普通 `begin_save()` 返回成功;保存期间收到外部修改后再调用 `fail_save()`,第 254 行同样把状态改成 `SaveFailed`,重试保存获准。两条路径都绕过了明确处理外部冲突的步骤。修复方向:独立保留未解决的外部修改事实,使编辑和保存失败持续维护冲突约束,覆盖这两种事件顺序。
|
|
|
|
crates/ely-files/src/session.rs:165 — 新增的 `finish_load()` 在完成回调时重新读取磁盘指纹,并无条件设为 `Saved`,会把加载之后的外部版本当作内存内容的基线。隔离测试让后台读取 14 字节内容,外部程序随后改写成 39 字节并调用 `external_modified()`,最后调用 `finish_load()`;实际记录的指纹长度为 39,状态为 `Saved`,内存仍是先前的 14 字节,违反 §6.1 的最后加载指纹要求及 FILE-02。修复方向:使用本次实际加载内容对应的指纹确认完成,保留其后发生的外部修改状态,并补充延迟完成回调的测试。
|