mirror of
https://github.com/feigeCode/navop.git
synced 2026-09-22 16:01:30 +00:00
48 lines
1.9 KiB
Rust
48 lines
1.9 KiB
Rust
use markdown_source::{
|
|
SourceEdit, SourceEditOrigin, SourceMarkdownDocument, SourceParseScope, SourceSelection,
|
|
SourceTransaction,
|
|
};
|
|
|
|
#[test]
|
|
fn edit_inside_one_block_uses_incremental_parse_and_keeps_trailing_ids() {
|
|
let source = "# Title\n\nBefore _old_ after\n\nTrailing [link](target)";
|
|
let document = SourceMarkdownDocument::parse(source).unwrap();
|
|
let trailing_id = document.blocks[2].id;
|
|
let trailing_range = document.blocks[2].source_range.clone();
|
|
let start = source.find("old").unwrap();
|
|
let transaction = SourceTransaction {
|
|
edits: vec![SourceEdit::new(start..start + 3, "longer", 0)],
|
|
origin: SourceEditOrigin::RichTextTyping,
|
|
allowed_ranges: vec![start..start + 3],
|
|
selection_before: SourceSelection::default(),
|
|
selection_after: SourceSelection::default(),
|
|
};
|
|
let applied = document.apply_transaction(&transaction).unwrap();
|
|
assert_eq!(SourceParseScope::SingleBlock, applied.parse_scope);
|
|
assert_eq!(trailing_id, applied.document.blocks[2].id);
|
|
assert_eq!(
|
|
trailing_range.start + 3..trailing_range.end + 3,
|
|
applied.document.blocks[2].source_range
|
|
);
|
|
assert_eq!(
|
|
"Before _longer_ after",
|
|
applied.document.blocks[1].original_source
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn structural_edit_falls_back_to_full_document_parse() {
|
|
let source = "one\n\ntwo";
|
|
let document = SourceMarkdownDocument::parse(source).unwrap();
|
|
let transaction = SourceTransaction {
|
|
edits: vec![SourceEdit::new(3..5, "\n\n# inserted\n\n", 0)],
|
|
origin: SourceEditOrigin::InsertBlock,
|
|
allowed_ranges: vec![3..5],
|
|
selection_before: SourceSelection::default(),
|
|
selection_after: SourceSelection::default(),
|
|
};
|
|
let applied = document.apply_transaction(&transaction).unwrap();
|
|
assert_eq!(SourceParseScope::FullDocument, applied.parse_scope);
|
|
assert!(applied.document.blocks.len() >= 3);
|
|
}
|