test: ReadingPosition serde round-trip tests for all 6 variants

This commit is contained in:
wangdl 2026-05-30 21:05:34 +08:00
parent 8166878bf8
commit b3a7fe0414

View File

@ -28,3 +28,75 @@ pub enum ReadingPosition {
},
Unknown,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_markdown_serde() {
let pos = ReadingPosition::Markdown {
block_id: "h1".into(),
scroll_progress: 0.5,
};
let json = serde_json::to_string(&pos).unwrap();
assert!(json.contains("\"type\":\"Markdown\""));
let back: ReadingPosition = serde_json::from_str(&json).unwrap();
assert_eq!(back, pos);
}
#[test]
fn test_text_serde() {
let pos = ReadingPosition::Text {
line_number: 42,
scroll_progress: 0.3,
};
let json = serde_json::to_string(&pos).unwrap();
let back: ReadingPosition = serde_json::from_str(&json).unwrap();
assert_eq!(back, pos);
}
#[test]
fn test_pdf_serde() {
let pos = ReadingPosition::Pdf {
page_number: 7,
page_progress: 0.8,
overall_progress: 0.35,
};
let json = serde_json::to_string(&pos).unwrap();
let back: ReadingPosition = serde_json::from_str(&json).unwrap();
assert_eq!(back, pos);
}
#[test]
fn test_image_serde() {
let pos = ReadingPosition::Image {
zoom_scale: 1.5,
offset_x: 100.0,
offset_y: 200.0,
};
let json = serde_json::to_string(&pos).unwrap();
let back: ReadingPosition = serde_json::from_str(&json).unwrap();
assert_eq!(back, pos);
}
#[test]
fn test_epub_serde() {
let pos = ReadingPosition::Epub {
chapter_id: "ch3".into(),
chapter_progress: 0.6,
overall_progress: 0.25,
};
let json = serde_json::to_string(&pos).unwrap();
let back: ReadingPosition = serde_json::from_str(&json).unwrap();
assert_eq!(back, pos);
}
#[test]
fn test_unknown_serde() {
let pos = ReadingPosition::Unknown;
let json = serde_json::to_string(&pos).unwrap();
let back: ReadingPosition = serde_json::from_str(&json).unwrap();
assert_eq!(back, pos);
}
}