From eba5b1ef3329bef35fe387b03bdf2f32cdb34761 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Hrastnik?= Date: Tue, 6 Oct 2020 14:44:33 +0900 Subject: [PATCH] Fix changeset composition, lengths don't have to match. --- helix-core/src/transaction.rs | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/helix-core/src/transaction.rs b/helix-core/src/transaction.rs index 7871052a..13c0c50f 100644 --- a/helix-core/src/transaction.rs +++ b/helix-core/src/transaction.rs @@ -45,10 +45,12 @@ impl ChangeSet { /// In other words, If `this` goes `docA` → `docB` and `other` represents `docB` → `docC`, the /// returned value will represent the change `docA` → `docC`. pub fn compose(self, other: ChangeSet) -> Result { - if self.len != other.len { - // length mismatch - return Err(()); - } + // TODO: len before should match len after + + // if self.len != other.len { + // // length mismatch + // return Err(()); + // } let len = self.changes.len(); @@ -477,23 +479,23 @@ mod test { Insert("!".into()), Retain(1), Delete(2), - Insert("ab".into()), + Insert("abc".into()), ], - len: 7, + len: 8, }; let b = ChangeSet { - changes: vec![Delete(5), Insert("world".into()), Retain(4)], - len: 7, + changes: vec![Delete(5), Insert("world".into()), Retain(5)], + len: 9, }; let mut text = Rope::from("hello xz"); // should probably return cloned text - a.compose(b).unwrap().apply(&mut text); - - // unimplemented!("{:?}", text); - // TODO: assert + let composed = a.compose(b).unwrap(); + assert_eq!(composed.len, 8); + assert!(composed.apply(&mut text)); + assert_eq!(text, "world! abc"); } #[test]