|
@@ -2,6 +2,7 @@
|
|
|
use crate::editor::{Rng, TestBuilder, TestOp::*};
|
|
|
use flowy_sync::client_document::{NewlineDoc, PlainDoc};
|
|
|
use lib_ot::{
|
|
|
+ core::Interval,
|
|
|
core::*,
|
|
|
rich_text::{AttributeBuilder, RichTextAttribute, RichTextAttributes, RichTextDelta},
|
|
|
};
|
|
@@ -39,23 +40,23 @@ fn attributes_insert_text_at_middle() {
|
|
|
#[test]
|
|
|
fn delta_get_ops_in_interval_1() {
|
|
|
let mut delta = RichTextDelta::default();
|
|
|
- let insert_a = OpBuilder::insert("123").build();
|
|
|
- let insert_b = OpBuilder::insert("4").build();
|
|
|
+ let insert_a = OperationBuilder::insert("123").build();
|
|
|
+ let insert_b = OperationBuilder::insert("4").build();
|
|
|
|
|
|
delta.add(insert_a.clone());
|
|
|
delta.add(insert_b.clone());
|
|
|
|
|
|
- let mut iterator = DeltaIter::from_interval(&delta, Interval::new(0, 4));
|
|
|
+ let mut iterator = DeltaIterator::from_interval(&delta, Interval::new(0, 4));
|
|
|
assert_eq!(iterator.ops(), delta.ops);
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
|
fn delta_get_ops_in_interval_2() {
|
|
|
let mut delta = RichTextDelta::default();
|
|
|
- let insert_a = OpBuilder::insert("123").build();
|
|
|
- let insert_b = OpBuilder::insert("4").build();
|
|
|
- let insert_c = OpBuilder::insert("5").build();
|
|
|
- let retain_a = OpBuilder::retain(3).build();
|
|
|
+ let insert_a = OperationBuilder::insert("123").build();
|
|
|
+ let insert_b = OperationBuilder::insert("4").build();
|
|
|
+ let insert_c = OperationBuilder::insert("5").build();
|
|
|
+ let retain_a = OperationBuilder::retain(3).build();
|
|
|
|
|
|
delta.add(insert_a.clone());
|
|
|
delta.add(retain_a.clone());
|
|
@@ -63,32 +64,32 @@ fn delta_get_ops_in_interval_2() {
|
|
|
delta.add(insert_c.clone());
|
|
|
|
|
|
assert_eq!(
|
|
|
- DeltaIter::from_interval(&delta, Interval::new(0, 2)).ops(),
|
|
|
- vec![OpBuilder::insert("12").build()]
|
|
|
+ DeltaIterator::from_interval(&delta, Interval::new(0, 2)).ops(),
|
|
|
+ vec![OperationBuilder::insert("12").build()]
|
|
|
);
|
|
|
|
|
|
assert_eq!(
|
|
|
- DeltaIter::from_interval(&delta, Interval::new(1, 3)).ops(),
|
|
|
- vec![OpBuilder::insert("23").build()]
|
|
|
+ DeltaIterator::from_interval(&delta, Interval::new(1, 3)).ops(),
|
|
|
+ vec![OperationBuilder::insert("23").build()]
|
|
|
);
|
|
|
|
|
|
assert_eq!(
|
|
|
- DeltaIter::from_interval(&delta, Interval::new(0, 3)).ops(),
|
|
|
+ DeltaIterator::from_interval(&delta, Interval::new(0, 3)).ops(),
|
|
|
vec![insert_a.clone()]
|
|
|
);
|
|
|
|
|
|
assert_eq!(
|
|
|
- DeltaIter::from_interval(&delta, Interval::new(0, 4)).ops(),
|
|
|
- vec![insert_a.clone(), OpBuilder::retain(1).build()]
|
|
|
+ DeltaIterator::from_interval(&delta, Interval::new(0, 4)).ops(),
|
|
|
+ vec![insert_a.clone(), OperationBuilder::retain(1).build()]
|
|
|
);
|
|
|
|
|
|
assert_eq!(
|
|
|
- DeltaIter::from_interval(&delta, Interval::new(0, 6)).ops(),
|
|
|
+ DeltaIterator::from_interval(&delta, Interval::new(0, 6)).ops(),
|
|
|
vec![insert_a.clone(), retain_a.clone()]
|
|
|
);
|
|
|
|
|
|
assert_eq!(
|
|
|
- DeltaIter::from_interval(&delta, Interval::new(0, 7)).ops(),
|
|
|
+ DeltaIterator::from_interval(&delta, Interval::new(0, 7)).ops(),
|
|
|
vec![insert_a.clone(), retain_a.clone(), insert_b.clone()]
|
|
|
);
|
|
|
}
|
|
@@ -96,54 +97,60 @@ fn delta_get_ops_in_interval_2() {
|
|
|
#[test]
|
|
|
fn delta_get_ops_in_interval_3() {
|
|
|
let mut delta = RichTextDelta::default();
|
|
|
- let insert_a = OpBuilder::insert("123456").build();
|
|
|
+ let insert_a = OperationBuilder::insert("123456").build();
|
|
|
delta.add(insert_a.clone());
|
|
|
assert_eq!(
|
|
|
- DeltaIter::from_interval(&delta, Interval::new(3, 5)).ops(),
|
|
|
- vec![OpBuilder::insert("45").build()]
|
|
|
+ DeltaIterator::from_interval(&delta, Interval::new(3, 5)).ops(),
|
|
|
+ vec![OperationBuilder::insert("45").build()]
|
|
|
);
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
|
fn delta_get_ops_in_interval_4() {
|
|
|
let mut delta = RichTextDelta::default();
|
|
|
- let insert_a = OpBuilder::insert("12").build();
|
|
|
- let insert_b = OpBuilder::insert("34").build();
|
|
|
- let insert_c = OpBuilder::insert("56").build();
|
|
|
+ let insert_a = OperationBuilder::insert("12").build();
|
|
|
+ let insert_b = OperationBuilder::insert("34").build();
|
|
|
+ let insert_c = OperationBuilder::insert("56").build();
|
|
|
|
|
|
delta.ops.push(insert_a.clone());
|
|
|
delta.ops.push(insert_b.clone());
|
|
|
delta.ops.push(insert_c.clone());
|
|
|
|
|
|
assert_eq!(
|
|
|
- DeltaIter::from_interval(&delta, Interval::new(0, 2)).ops(),
|
|
|
+ DeltaIterator::from_interval(&delta, Interval::new(0, 2)).ops(),
|
|
|
vec![insert_a]
|
|
|
);
|
|
|
assert_eq!(
|
|
|
- DeltaIter::from_interval(&delta, Interval::new(2, 4)).ops(),
|
|
|
+ DeltaIterator::from_interval(&delta, Interval::new(2, 4)).ops(),
|
|
|
vec![insert_b]
|
|
|
);
|
|
|
assert_eq!(
|
|
|
- DeltaIter::from_interval(&delta, Interval::new(4, 6)).ops(),
|
|
|
+ DeltaIterator::from_interval(&delta, Interval::new(4, 6)).ops(),
|
|
|
vec![insert_c]
|
|
|
);
|
|
|
|
|
|
assert_eq!(
|
|
|
- DeltaIter::from_interval(&delta, Interval::new(2, 5)).ops(),
|
|
|
- vec![OpBuilder::insert("34").build(), OpBuilder::insert("5").build()]
|
|
|
+ DeltaIterator::from_interval(&delta, Interval::new(2, 5)).ops(),
|
|
|
+ vec![
|
|
|
+ OperationBuilder::insert("34").build(),
|
|
|
+ OperationBuilder::insert("5").build()
|
|
|
+ ]
|
|
|
);
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
|
fn delta_get_ops_in_interval_5() {
|
|
|
let mut delta = RichTextDelta::default();
|
|
|
- let insert_a = OpBuilder::insert("123456").build();
|
|
|
- let insert_b = OpBuilder::insert("789").build();
|
|
|
+ let insert_a = OperationBuilder::insert("123456").build();
|
|
|
+ let insert_b = OperationBuilder::insert("789").build();
|
|
|
delta.ops.push(insert_a.clone());
|
|
|
delta.ops.push(insert_b.clone());
|
|
|
assert_eq!(
|
|
|
- DeltaIter::from_interval(&delta, Interval::new(4, 8)).ops(),
|
|
|
- vec![OpBuilder::insert("56").build(), OpBuilder::insert("78").build()]
|
|
|
+ DeltaIterator::from_interval(&delta, Interval::new(4, 8)).ops(),
|
|
|
+ vec![
|
|
|
+ OperationBuilder::insert("56").build(),
|
|
|
+ OperationBuilder::insert("78").build()
|
|
|
+ ]
|
|
|
);
|
|
|
|
|
|
// assert_eq!(
|
|
@@ -155,54 +162,60 @@ fn delta_get_ops_in_interval_5() {
|
|
|
#[test]
|
|
|
fn delta_get_ops_in_interval_6() {
|
|
|
let mut delta = RichTextDelta::default();
|
|
|
- let insert_a = OpBuilder::insert("12345678").build();
|
|
|
+ let insert_a = OperationBuilder::insert("12345678").build();
|
|
|
delta.add(insert_a.clone());
|
|
|
assert_eq!(
|
|
|
- DeltaIter::from_interval(&delta, Interval::new(4, 6)).ops(),
|
|
|
- vec![OpBuilder::insert("56").build()]
|
|
|
+ DeltaIterator::from_interval(&delta, Interval::new(4, 6)).ops(),
|
|
|
+ vec![OperationBuilder::insert("56").build()]
|
|
|
);
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
|
fn delta_get_ops_in_interval_7() {
|
|
|
let mut delta = RichTextDelta::default();
|
|
|
- let insert_a = OpBuilder::insert("12345").build();
|
|
|
- let retain_a = OpBuilder::retain(3).build();
|
|
|
+ let insert_a = OperationBuilder::insert("12345").build();
|
|
|
+ let retain_a = OperationBuilder::retain(3).build();
|
|
|
|
|
|
delta.add(insert_a.clone());
|
|
|
delta.add(retain_a.clone());
|
|
|
|
|
|
- let mut iter_1 = DeltaIter::from_offset(&delta, 2);
|
|
|
- assert_eq!(iter_1.next_op().unwrap(), OpBuilder::insert("345").build());
|
|
|
- assert_eq!(iter_1.next_op().unwrap(), OpBuilder::retain(3).build());
|
|
|
+ let mut iter_1 = DeltaIterator::from_offset(&delta, 2);
|
|
|
+ assert_eq!(iter_1.next_op().unwrap(), OperationBuilder::insert("345").build());
|
|
|
+ assert_eq!(iter_1.next_op().unwrap(), OperationBuilder::retain(3).build());
|
|
|
|
|
|
- let mut iter_2 = DeltaIter::new(&delta);
|
|
|
- assert_eq!(iter_2.next_op_with_len(2).unwrap(), OpBuilder::insert("12").build());
|
|
|
- assert_eq!(iter_2.next_op().unwrap(), OpBuilder::insert("345").build());
|
|
|
+ let mut iter_2 = DeltaIterator::new(&delta);
|
|
|
+ assert_eq!(
|
|
|
+ iter_2.next_op_with_len(2).unwrap(),
|
|
|
+ OperationBuilder::insert("12").build()
|
|
|
+ );
|
|
|
+ assert_eq!(iter_2.next_op().unwrap(), OperationBuilder::insert("345").build());
|
|
|
|
|
|
- assert_eq!(iter_2.next_op().unwrap(), OpBuilder::retain(3).build());
|
|
|
+ assert_eq!(iter_2.next_op().unwrap(), OperationBuilder::retain(3).build());
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
|
fn delta_op_seek() {
|
|
|
let mut delta = RichTextDelta::default();
|
|
|
- let insert_a = OpBuilder::insert("12345").build();
|
|
|
- let retain_a = OpBuilder::retain(3).build();
|
|
|
+ let insert_a = OperationBuilder::insert("12345").build();
|
|
|
+ let retain_a = OperationBuilder::retain(3).build();
|
|
|
delta.add(insert_a.clone());
|
|
|
delta.add(retain_a.clone());
|
|
|
- let mut iter = DeltaIter::new(&delta);
|
|
|
+ let mut iter = DeltaIterator::new(&delta);
|
|
|
iter.seek::<OpMetric>(1);
|
|
|
- assert_eq!(iter.next_op().unwrap(), OpBuilder::retain(3).build());
|
|
|
+ assert_eq!(iter.next_op().unwrap(), retain_a);
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
|
fn delta_utf16_code_unit_seek() {
|
|
|
let mut delta = RichTextDelta::default();
|
|
|
- delta.add(OpBuilder::insert("12345").build());
|
|
|
+ delta.add(OperationBuilder::insert("12345").build());
|
|
|
|
|
|
- let mut iter = DeltaIter::new(&delta);
|
|
|
+ let mut iter = DeltaIterator::new(&delta);
|
|
|
iter.seek::<Utf16CodeUnitMetric>(3);
|
|
|
- assert_eq!(iter.next_op_with_len(2).unwrap(), OpBuilder::insert("45").build());
|
|
|
+ assert_eq!(
|
|
|
+ iter.next_op_with_len(2).unwrap(),
|
|
|
+ OperationBuilder::insert("45").build()
|
|
|
+ );
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
@@ -213,77 +226,92 @@ fn delta_utf16_code_unit_seek_with_attributes() {
|
|
|
.add_attr(RichTextAttribute::Italic(true))
|
|
|
.build();
|
|
|
|
|
|
- delta.add(OpBuilder::insert("1234").attributes(attributes.clone()).build());
|
|
|
- delta.add(OpBuilder::insert("\n").build());
|
|
|
+ delta.add(OperationBuilder::insert("1234").attributes(attributes.clone()).build());
|
|
|
+ delta.add(OperationBuilder::insert("\n").build());
|
|
|
|
|
|
- let mut iter = DeltaIter::new(&delta);
|
|
|
+ let mut iter = DeltaIterator::new(&delta);
|
|
|
iter.seek::<Utf16CodeUnitMetric>(0);
|
|
|
|
|
|
assert_eq!(
|
|
|
iter.next_op_with_len(4).unwrap(),
|
|
|
- OpBuilder::insert("1234").attributes(attributes).build(),
|
|
|
+ OperationBuilder::insert("1234").attributes(attributes).build(),
|
|
|
);
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
|
fn delta_next_op_len() {
|
|
|
let mut delta = RichTextDelta::default();
|
|
|
- delta.add(OpBuilder::insert("12345").build());
|
|
|
- let mut iter = DeltaIter::new(&delta);
|
|
|
- assert_eq!(iter.next_op_with_len(2).unwrap(), OpBuilder::insert("12").build());
|
|
|
- assert_eq!(iter.next_op_with_len(2).unwrap(), OpBuilder::insert("34").build());
|
|
|
- assert_eq!(iter.next_op_with_len(2).unwrap(), OpBuilder::insert("5").build());
|
|
|
+ delta.add(OperationBuilder::insert("12345").build());
|
|
|
+ let mut iter = DeltaIterator::new(&delta);
|
|
|
+ assert_eq!(
|
|
|
+ iter.next_op_with_len(2).unwrap(),
|
|
|
+ OperationBuilder::insert("12").build()
|
|
|
+ );
|
|
|
+ assert_eq!(
|
|
|
+ iter.next_op_with_len(2).unwrap(),
|
|
|
+ OperationBuilder::insert("34").build()
|
|
|
+ );
|
|
|
+ assert_eq!(iter.next_op_with_len(2).unwrap(), OperationBuilder::insert("5").build());
|
|
|
assert_eq!(iter.next_op_with_len(1), None);
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
|
fn delta_next_op_len_with_chinese() {
|
|
|
let mut delta = RichTextDelta::default();
|
|
|
- delta.add(OpBuilder::insert("你好").build());
|
|
|
+ delta.add(OperationBuilder::insert("你好").build());
|
|
|
|
|
|
- let mut iter = DeltaIter::new(&delta);
|
|
|
+ let mut iter = DeltaIterator::new(&delta);
|
|
|
assert_eq!(iter.next_op_len().unwrap(), 2);
|
|
|
- assert_eq!(iter.next_op_with_len(2).unwrap(), OpBuilder::insert("你好").build());
|
|
|
+ assert_eq!(
|
|
|
+ iter.next_op_with_len(2).unwrap(),
|
|
|
+ OperationBuilder::insert("你好").build()
|
|
|
+ );
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
|
fn delta_next_op_len_with_english() {
|
|
|
let mut delta = RichTextDelta::default();
|
|
|
- delta.add(OpBuilder::insert("ab").build());
|
|
|
- let mut iter = DeltaIter::new(&delta);
|
|
|
+ delta.add(OperationBuilder::insert("ab").build());
|
|
|
+ let mut iter = DeltaIterator::new(&delta);
|
|
|
assert_eq!(iter.next_op_len().unwrap(), 2);
|
|
|
- assert_eq!(iter.next_op_with_len(2).unwrap(), OpBuilder::insert("ab").build());
|
|
|
+ assert_eq!(
|
|
|
+ iter.next_op_with_len(2).unwrap(),
|
|
|
+ OperationBuilder::insert("ab").build()
|
|
|
+ );
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
|
fn delta_next_op_len_after_seek() {
|
|
|
let mut delta = RichTextDelta::default();
|
|
|
- delta.add(OpBuilder::insert("12345").build());
|
|
|
- let mut iter = DeltaIter::new(&delta);
|
|
|
+ delta.add(OperationBuilder::insert("12345").build());
|
|
|
+ let mut iter = DeltaIterator::new(&delta);
|
|
|
assert_eq!(iter.next_op_len().unwrap(), 5);
|
|
|
iter.seek::<Utf16CodeUnitMetric>(3);
|
|
|
assert_eq!(iter.next_op_len().unwrap(), 2);
|
|
|
- assert_eq!(iter.next_op_with_len(1).unwrap(), OpBuilder::insert("4").build());
|
|
|
+ assert_eq!(iter.next_op_with_len(1).unwrap(), OperationBuilder::insert("4").build());
|
|
|
assert_eq!(iter.next_op_len().unwrap(), 1);
|
|
|
- assert_eq!(iter.next_op().unwrap(), OpBuilder::insert("5").build());
|
|
|
+ assert_eq!(iter.next_op().unwrap(), OperationBuilder::insert("5").build());
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
|
fn delta_next_op_len_none() {
|
|
|
let mut delta = RichTextDelta::default();
|
|
|
- delta.add(OpBuilder::insert("12345").build());
|
|
|
- let mut iter = DeltaIter::new(&delta);
|
|
|
+ delta.add(OperationBuilder::insert("12345").build());
|
|
|
+ let mut iter = DeltaIterator::new(&delta);
|
|
|
|
|
|
assert_eq!(iter.next_op_len().unwrap(), 5);
|
|
|
- assert_eq!(iter.next_op_with_len(5).unwrap(), OpBuilder::insert("12345").build());
|
|
|
+ assert_eq!(
|
|
|
+ iter.next_op_with_len(5).unwrap(),
|
|
|
+ OperationBuilder::insert("12345").build()
|
|
|
+ );
|
|
|
assert_eq!(iter.next_op_len(), None);
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
|
fn delta_next_op_with_len_zero() {
|
|
|
let mut delta = RichTextDelta::default();
|
|
|
- delta.add(OpBuilder::insert("12345").build());
|
|
|
- let mut iter = DeltaIter::new(&delta);
|
|
|
+ delta.add(OperationBuilder::insert("12345").build());
|
|
|
+ let mut iter = DeltaIterator::new(&delta);
|
|
|
assert_eq!(iter.next_op_with_len(0), None,);
|
|
|
assert_eq!(iter.next_op_len().unwrap(), 5);
|
|
|
}
|
|
@@ -291,14 +319,14 @@ fn delta_next_op_with_len_zero() {
|
|
|
#[test]
|
|
|
fn delta_next_op_with_len_cross_op_return_last() {
|
|
|
let mut delta = RichTextDelta::default();
|
|
|
- delta.add(OpBuilder::insert("12345").build());
|
|
|
- delta.add(OpBuilder::retain(1).build());
|
|
|
- delta.add(OpBuilder::insert("678").build());
|
|
|
+ delta.add(OperationBuilder::insert("12345").build());
|
|
|
+ delta.add(OperationBuilder::retain(1).build());
|
|
|
+ delta.add(OperationBuilder::insert("678").build());
|
|
|
|
|
|
- let mut iter = DeltaIter::new(&delta);
|
|
|
+ let mut iter = DeltaIterator::new(&delta);
|
|
|
iter.seek::<Utf16CodeUnitMetric>(4);
|
|
|
assert_eq!(iter.next_op_len().unwrap(), 1);
|
|
|
- assert_eq!(iter.next_op_with_len(2).unwrap(), OpBuilder::retain(1).build());
|
|
|
+ assert_eq!(iter.next_op_with_len(2).unwrap(), OperationBuilder::retain(1).build());
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
@@ -342,18 +370,17 @@ fn apply_1000() {
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
|
-fn apply() {
|
|
|
- let s = "hello world,".to_owned();
|
|
|
- let mut delta_a = RichTextDelta::default();
|
|
|
- delta_a.insert(&s, RichTextAttributes::default());
|
|
|
-
|
|
|
- let mut delta_b = RichTextDelta::default();
|
|
|
- delta_b.retain(s.len(), RichTextAttributes::default());
|
|
|
- delta_b.insert("appflowy", RichTextAttributes::default());
|
|
|
+fn apply_test() {
|
|
|
+ let s = "hello";
|
|
|
+ let delta_a = PlainTextDeltaBuilder::new().insert(s).build();
|
|
|
+ let delta_b = PlainTextDeltaBuilder::new()
|
|
|
+ .retain(s.len())
|
|
|
+ .insert(", AppFlowy")
|
|
|
+ .build();
|
|
|
|
|
|
- let after_a = delta_a.apply("").unwrap();
|
|
|
+ let after_a = delta_a.to_str().unwrap();
|
|
|
let after_b = delta_b.apply(&after_a).unwrap();
|
|
|
- assert_eq!("hello world,appflowy", &after_b);
|
|
|
+ assert_eq!("hello, AppFlowy", &after_b);
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
@@ -384,6 +411,17 @@ fn invert() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+#[test]
|
|
|
+fn invert_test() {
|
|
|
+ let s = "hello world";
|
|
|
+ let delta = PlainTextDeltaBuilder::new().insert(s).build();
|
|
|
+ let invert_delta = delta.invert_str("");
|
|
|
+ assert_eq!(delta.utf16_base_len, invert_delta.utf16_target_len);
|
|
|
+ assert_eq!(delta.utf16_target_len, invert_delta.utf16_base_len);
|
|
|
+
|
|
|
+ assert_eq!(invert_delta.apply(s).unwrap(), "")
|
|
|
+}
|
|
|
+
|
|
|
#[test]
|
|
|
fn empty_ops() {
|
|
|
let mut delta = RichTextDelta::default();
|
|
@@ -415,23 +453,24 @@ fn ops_merging() {
|
|
|
assert_eq!(delta.ops.len(), 0);
|
|
|
delta.retain(2, RichTextAttributes::default());
|
|
|
assert_eq!(delta.ops.len(), 1);
|
|
|
- assert_eq!(delta.ops.last(), Some(&OpBuilder::retain(2).build()));
|
|
|
+ assert_eq!(delta.ops.last(), Some(&OperationBuilder::retain(2).build()));
|
|
|
delta.retain(3, RichTextAttributes::default());
|
|
|
assert_eq!(delta.ops.len(), 1);
|
|
|
- assert_eq!(delta.ops.last(), Some(&OpBuilder::retain(5).build()));
|
|
|
+ assert_eq!(delta.ops.last(), Some(&OperationBuilder::retain(5).build()));
|
|
|
delta.insert("abc", RichTextAttributes::default());
|
|
|
assert_eq!(delta.ops.len(), 2);
|
|
|
- assert_eq!(delta.ops.last(), Some(&OpBuilder::insert("abc").build()));
|
|
|
+ assert_eq!(delta.ops.last(), Some(&OperationBuilder::insert("abc").build()));
|
|
|
delta.insert("xyz", RichTextAttributes::default());
|
|
|
assert_eq!(delta.ops.len(), 2);
|
|
|
- assert_eq!(delta.ops.last(), Some(&OpBuilder::insert("abcxyz").build()));
|
|
|
+ assert_eq!(delta.ops.last(), Some(&OperationBuilder::insert("abcxyz").build()));
|
|
|
delta.delete(1);
|
|
|
assert_eq!(delta.ops.len(), 3);
|
|
|
- assert_eq!(delta.ops.last(), Some(&OpBuilder::delete(1).build()));
|
|
|
+ assert_eq!(delta.ops.last(), Some(&OperationBuilder::delete(1).build()));
|
|
|
delta.delete(1);
|
|
|
assert_eq!(delta.ops.len(), 3);
|
|
|
- assert_eq!(delta.ops.last(), Some(&OpBuilder::delete(2).build()));
|
|
|
+ assert_eq!(delta.ops.last(), Some(&OperationBuilder::delete(2).build()));
|
|
|
}
|
|
|
+
|
|
|
#[test]
|
|
|
fn is_noop() {
|
|
|
let mut delta = RichTextDelta::default();
|
|
@@ -582,11 +621,11 @@ fn transform_two_conflict_non_seq_delta() {
|
|
|
#[test]
|
|
|
fn delta_invert_no_attribute_delta() {
|
|
|
let mut delta = RichTextDelta::default();
|
|
|
- delta.add(OpBuilder::insert("123").build());
|
|
|
+ delta.add(OperationBuilder::insert("123").build());
|
|
|
|
|
|
let mut change = RichTextDelta::default();
|
|
|
- change.add(OpBuilder::retain(3).build());
|
|
|
- change.add(OpBuilder::insert("456").build());
|
|
|
+ change.add(OperationBuilder::retain(3).build());
|
|
|
+ change.add(OperationBuilder::insert("456").build());
|
|
|
let undo = change.invert(&delta);
|
|
|
|
|
|
let new_delta = delta.compose(&change).unwrap();
|