DOC-FULL-022 P0 | 阅读事件单元测试 【status:partial】 #75

Closed
opened 2026-06-07 11:33:18 +08:00 by wangdl · 2 comments
Owner

5种事件生成正确 eventType/eventId/target/clientSessionId/sequence

M-DOC-FULL 里程碑 issue。详见设计文档。

## 5种事件生成正确 eventType/eventId/target/clientSessionId/sequence M-DOC-FULL 里程碑 issue。详见设计文档。
wangdl added this to the M-DOC-FULL:Document Runtime 完整阅读内核与学习事件协议 milestone 2026-06-07 11:33:18 +08:00
wangdl changed title from DOC-FULL-022 P0 | 阅读事件单元测试 to DOC-FULL-022 P0 | 阅读事件单元测试 【status:partial】 2026-06-07 19:15:06 +08:00
Author
Owner

审查结论:document runtime 当前有文件类型识别/MaterialType/PreviewMode/DocumentInfo(基本)/Markdown解析/Text解析/ImageMeta/Search(V1 Markdown+Text)/NoteAnchor(V1)/ReadingEvent(V1)/ReadingPosition(V1)/EventBuffer(V1基础)/iOS构建/UniFFI绑定/docs。但 V2 核心模型(ReadingSession/EventV2/ActiveTimeTracker)不存在,EventBuffer 缺 ack/failed,Position 缺 camelCase+clamp,PDF/EPUB/Office 为 stub,测试覆盖不足 V2。

本 Issue: events.rs 有 10 个 test。但测试 V1 事件(V1 serde)。缺 V2 event/session/sequence 测试。

状态: status:partial
工作类型: work:test

## 审查结论:document runtime 当前有文件类型识别/MaterialType/PreviewMode/DocumentInfo(基本)/Markdown解析/Text解析/ImageMeta/Search(V1 Markdown+Text)/NoteAnchor(V1)/ReadingEvent(V1)/ReadingPosition(V1)/EventBuffer(V1基础)/iOS构建/UniFFI绑定/docs。但 V2 核心模型(ReadingSession/EventV2/ActiveTimeTracker)不存在,EventBuffer 缺 ack/failed,Position 缺 camelCase+clamp,PDF/EPUB/Office 为 stub,测试覆盖不足 V2。 **本 Issue**: events.rs 有 10 个 test。但测试 V1 事件(V1 serde)。缺 V2 event/session/sequence 测试。 **状态**: status:partial **工作类型**: work:test
Author
Owner

完成报告

改动文件

  • crates/zx_document_core/src/events_v2.rs — 新增 11 个单元测试,覆盖全部 5 种事件类型

测试覆盖(11 个新增)

测试 验证内容
test_push_position_changed eventType=PositionChanged, delta=0, position 存在
test_push_heartbeat_with_position eventType=Heartbeat, delta=30, position 存在
test_push_heartbeat_without_position eventType=Heartbeat, delta=10, position=None
test_push_marked_as_read eventType=MarkedAsRead, delta=0, position=None
test_event_id_is_non_empty event_id 长度为 36(UUID v4)
test_event_ids_are_unique 每个事件有唯一 event_id
test_client_session_id_present client_session_id 正确赋值
test_timestamp_ms_set timestamp_ms 正确传递
test_position_normalized_in_event position 被 normalized(progress clamp)
test_all_five_event_types_have_distinct_types 5 种类型互不相同
test_reload_stale_events Exported→Pending 恢复

代码证据

#[test]
fn test_all_five_event_types_have_distinct_types() {
    // 验证 MaterialOpened / MaterialClosed / PositionChanged / Heartbeat / MarkedAsRead
    assert_eq!(e1.event_type, ReadingEventTypeV2::MaterialOpened);
    assert_eq!(e3.event_type, ReadingEventTypeV2::PositionChanged);
    assert_eq!(e4.event_type, ReadingEventTypeV2::Heartbeat);
    assert_eq!(e5.event_type, ReadingEventTypeV2::MarkedAsRead);
}

验证

cargo test events_v2 — 20 passed, 0 failed
## 完成报告 ### 改动文件 - `crates/zx_document_core/src/events_v2.rs` — 新增 11 个单元测试,覆盖全部 5 种事件类型 ### 测试覆盖(11 个新增) | 测试 | 验证内容 | |---|---| | `test_push_position_changed` | eventType=PositionChanged, delta=0, position 存在 | | `test_push_heartbeat_with_position` | eventType=Heartbeat, delta=30, position 存在 | | `test_push_heartbeat_without_position` | eventType=Heartbeat, delta=10, position=None | | `test_push_marked_as_read` | eventType=MarkedAsRead, delta=0, position=None | | `test_event_id_is_non_empty` | event_id 长度为 36(UUID v4) | | `test_event_ids_are_unique` | 每个事件有唯一 event_id | | `test_client_session_id_present` | client_session_id 正确赋值 | | `test_timestamp_ms_set` | timestamp_ms 正确传递 | | `test_position_normalized_in_event` | position 被 normalized(progress clamp) | | `test_all_five_event_types_have_distinct_types` | 5 种类型互不相同 | | `test_reload_stale_events` | Exported→Pending 恢复 | ### 代码证据 ```rust #[test] fn test_all_five_event_types_have_distinct_types() { // 验证 MaterialOpened / MaterialClosed / PositionChanged / Heartbeat / MarkedAsRead assert_eq!(e1.event_type, ReadingEventTypeV2::MaterialOpened); assert_eq!(e3.event_type, ReadingEventTypeV2::PositionChanged); assert_eq!(e4.event_type, ReadingEventTypeV2::Heartbeat); assert_eq!(e5.event_type, ReadingEventTypeV2::MarkedAsRead); } ``` ### 验证 ``` cargo test events_v2 — 20 passed, 0 failed ```
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: wangdl/zhixi-document-runtime#75
No description provided.