Files

96 lines
2.7 KiB
Rust
Raw Permalink Normal View History

use mnote_editor_core::{
export_markdown, import_markdown, import_plain_text, BlockType, ReferenceKind,
};
#[test]
fn markdown_import_export_round_trip_preserves_block_kinds() {
let source = r#"# 根标题
- 列表项
- [x] 已完成
> 引用
---
```rust
fn main() {}
```
[[page_1|页面一]]
((block_1|块一))
普通段落
"#;
let document = import_markdown(source).expect("markdown import should succeed");
assert_eq!(
document
.blocks()
.iter()
.map(|block| block.block_type.clone())
.collect::<Vec<_>>(),
vec![
BlockType::Heading,
BlockType::BulletListItem,
BlockType::Todo,
BlockType::Quote,
BlockType::Divider,
BlockType::CodeBlock,
BlockType::PageReference,
BlockType::BlockReference,
BlockType::Paragraph,
]
);
let exported = export_markdown(&document);
let reparsed = import_markdown(&exported).expect("markdown re-import should succeed");
assert_eq!(
reparsed
.blocks()
.iter()
.map(|block| block.block_type.clone())
.collect::<Vec<_>>(),
document
.blocks()
.iter()
.map(|block| block.block_type.clone())
.collect::<Vec<_>>()
);
}
#[test]
fn markdown_export_renders_reference_tokens_and_code_fence() {
let source = r#"[[page_42|设计文档]]
((block_99|引用块))
```ts
console.log("ok");
```
"#;
let document = import_markdown(source).expect("markdown import should succeed");
let page_ref = document.blocks()[0]
.content
.reference
.as_ref()
.expect("page reference");
assert_eq!(page_ref.kind, ReferenceKind::Page);
let block_ref = document.blocks()[1]
.content
.reference
.as_ref()
.expect("block reference");
assert_eq!(block_ref.kind, ReferenceKind::Block);
let exported = export_markdown(&document);
assert!(exported.contains("[[page_42|设计文档]]"));
assert!(exported.contains("((block_99|引用块))"));
assert!(exported.contains("```ts"));
assert!(exported.contains("console.log(\"ok\");"));
}
#[test]
fn plain_text_import_splits_paragraphs_and_normalizes_line_breaks() {
let document =
import_plain_text("第一段\n继续\n\n第二段").expect("plain text import should succeed");
assert_eq!(document.blocks().len(), 2);
assert_eq!(document.blocks()[0].content.text, "第一段 继续");
assert_eq!(document.blocks()[1].content.text, "第二段");
assert_eq!(document.blocks()[0].id, "imported_1");
assert_eq!(document.blocks()[1].id, "imported_2");
}