|
@@ -1,11 +1,11 @@
|
|
|
#![allow(clippy::all)]
|
|
|
use crate::editor::{Rng, TestBuilder, TestOp::*};
|
|
|
use flowy_sync::client_document::{NewlineDoc, PlainDoc};
|
|
|
-use lib_ot::rich_text::RichTextDeltaBuilder;
|
|
|
+use lib_ot::text_delta::TextDeltaBuilder;
|
|
|
use lib_ot::{
|
|
|
core::Interval,
|
|
|
core::*,
|
|
|
- rich_text::{AttributeBuilder, RichTextDelta, TextAttribute, TextAttributes},
|
|
|
+ text_delta::{AttributeBuilder, TextAttribute, TextAttributes, TextDelta},
|
|
|
};
|
|
|
|
|
|
#[test]
|
|
@@ -41,15 +41,15 @@ fn attributes_insert_text_at_middle() {
|
|
|
#[test]
|
|
|
fn delta_get_ops_in_interval_1() {
|
|
|
let operations = OperationsBuilder::new().insert("123").insert("4").build();
|
|
|
- let delta = RichTextDeltaBuilder::from_operations(operations);
|
|
|
+ let delta = TextDeltaBuilder::from_operations(operations);
|
|
|
|
|
|
- let mut iterator = DeltaIterator::from_interval(&delta, Interval::new(0, 4));
|
|
|
+ let mut iterator = OperationIterator::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 mut delta = TextDelta::default();
|
|
|
let insert_a = Operation::insert("123");
|
|
|
let insert_b = Operation::insert("4");
|
|
|
let insert_c = Operation::insert("5");
|
|
@@ -61,50 +61,50 @@ fn delta_get_ops_in_interval_2() {
|
|
|
delta.add(insert_c.clone());
|
|
|
|
|
|
assert_eq!(
|
|
|
- DeltaIterator::from_interval(&delta, Interval::new(0, 2)).ops(),
|
|
|
+ OperationIterator::from_interval(&delta, Interval::new(0, 2)).ops(),
|
|
|
vec![Operation::insert("12")]
|
|
|
);
|
|
|
|
|
|
assert_eq!(
|
|
|
- DeltaIterator::from_interval(&delta, Interval::new(1, 3)).ops(),
|
|
|
+ OperationIterator::from_interval(&delta, Interval::new(1, 3)).ops(),
|
|
|
vec![Operation::insert("23")]
|
|
|
);
|
|
|
|
|
|
assert_eq!(
|
|
|
- DeltaIterator::from_interval(&delta, Interval::new(0, 3)).ops(),
|
|
|
+ OperationIterator::from_interval(&delta, Interval::new(0, 3)).ops(),
|
|
|
vec![insert_a.clone()]
|
|
|
);
|
|
|
|
|
|
assert_eq!(
|
|
|
- DeltaIterator::from_interval(&delta, Interval::new(0, 4)).ops(),
|
|
|
+ OperationIterator::from_interval(&delta, Interval::new(0, 4)).ops(),
|
|
|
vec![insert_a.clone(), Operation::retain(1)]
|
|
|
);
|
|
|
|
|
|
assert_eq!(
|
|
|
- DeltaIterator::from_interval(&delta, Interval::new(0, 6)).ops(),
|
|
|
+ OperationIterator::from_interval(&delta, Interval::new(0, 6)).ops(),
|
|
|
vec![insert_a.clone(), retain_a.clone()]
|
|
|
);
|
|
|
|
|
|
assert_eq!(
|
|
|
- DeltaIterator::from_interval(&delta, Interval::new(0, 7)).ops(),
|
|
|
+ OperationIterator::from_interval(&delta, Interval::new(0, 7)).ops(),
|
|
|
vec![insert_a.clone(), retain_a.clone(), insert_b.clone()]
|
|
|
);
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
|
fn delta_get_ops_in_interval_3() {
|
|
|
- let mut delta = RichTextDelta::default();
|
|
|
+ let mut delta = TextDelta::default();
|
|
|
let insert_a = Operation::insert("123456");
|
|
|
delta.add(insert_a.clone());
|
|
|
assert_eq!(
|
|
|
- DeltaIterator::from_interval(&delta, Interval::new(3, 5)).ops(),
|
|
|
+ OperationIterator::from_interval(&delta, Interval::new(3, 5)).ops(),
|
|
|
vec![Operation::insert("45")]
|
|
|
);
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
|
fn delta_get_ops_in_interval_4() {
|
|
|
- let mut delta = RichTextDelta::default();
|
|
|
+ let mut delta = TextDelta::default();
|
|
|
let insert_a = Operation::insert("12");
|
|
|
let insert_b = Operation::insert("34");
|
|
|
let insert_c = Operation::insert("56");
|
|
@@ -114,33 +114,33 @@ fn delta_get_ops_in_interval_4() {
|
|
|
delta.ops.push(insert_c.clone());
|
|
|
|
|
|
assert_eq!(
|
|
|
- DeltaIterator::from_interval(&delta, Interval::new(0, 2)).ops(),
|
|
|
+ OperationIterator::from_interval(&delta, Interval::new(0, 2)).ops(),
|
|
|
vec![insert_a]
|
|
|
);
|
|
|
assert_eq!(
|
|
|
- DeltaIterator::from_interval(&delta, Interval::new(2, 4)).ops(),
|
|
|
+ OperationIterator::from_interval(&delta, Interval::new(2, 4)).ops(),
|
|
|
vec![insert_b]
|
|
|
);
|
|
|
assert_eq!(
|
|
|
- DeltaIterator::from_interval(&delta, Interval::new(4, 6)).ops(),
|
|
|
+ OperationIterator::from_interval(&delta, Interval::new(4, 6)).ops(),
|
|
|
vec![insert_c]
|
|
|
);
|
|
|
|
|
|
assert_eq!(
|
|
|
- DeltaIterator::from_interval(&delta, Interval::new(2, 5)).ops(),
|
|
|
+ OperationIterator::from_interval(&delta, Interval::new(2, 5)).ops(),
|
|
|
vec![Operation::insert("34"), Operation::insert("5")]
|
|
|
);
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
|
fn delta_get_ops_in_interval_5() {
|
|
|
- let mut delta = RichTextDelta::default();
|
|
|
+ let mut delta = TextDelta::default();
|
|
|
let insert_a = Operation::insert("123456");
|
|
|
let insert_b = Operation::insert("789");
|
|
|
delta.ops.push(insert_a.clone());
|
|
|
delta.ops.push(insert_b.clone());
|
|
|
assert_eq!(
|
|
|
- DeltaIterator::from_interval(&delta, Interval::new(4, 8)).ops(),
|
|
|
+ OperationIterator::from_interval(&delta, Interval::new(4, 8)).ops(),
|
|
|
vec![Operation::insert("56"), Operation::insert("78")]
|
|
|
);
|
|
|
|
|
@@ -152,29 +152,29 @@ fn delta_get_ops_in_interval_5() {
|
|
|
|
|
|
#[test]
|
|
|
fn delta_get_ops_in_interval_6() {
|
|
|
- let mut delta = RichTextDelta::default();
|
|
|
+ let mut delta = TextDelta::default();
|
|
|
let insert_a = Operation::insert("12345678");
|
|
|
delta.add(insert_a.clone());
|
|
|
assert_eq!(
|
|
|
- DeltaIterator::from_interval(&delta, Interval::new(4, 6)).ops(),
|
|
|
+ OperationIterator::from_interval(&delta, Interval::new(4, 6)).ops(),
|
|
|
vec![Operation::insert("56")]
|
|
|
);
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
|
fn delta_get_ops_in_interval_7() {
|
|
|
- let mut delta = RichTextDelta::default();
|
|
|
+ let mut delta = TextDelta::default();
|
|
|
let insert_a = Operation::insert("12345");
|
|
|
let retain_a = Operation::retain(3);
|
|
|
|
|
|
delta.add(insert_a.clone());
|
|
|
delta.add(retain_a.clone());
|
|
|
|
|
|
- let mut iter_1 = DeltaIterator::from_offset(&delta, 2);
|
|
|
+ let mut iter_1 = OperationIterator::from_offset(&delta, 2);
|
|
|
assert_eq!(iter_1.next_op().unwrap(), Operation::insert("345"));
|
|
|
assert_eq!(iter_1.next_op().unwrap(), Operation::retain(3));
|
|
|
|
|
|
- let mut iter_2 = DeltaIterator::new(&delta);
|
|
|
+ let mut iter_2 = OperationIterator::new(&delta);
|
|
|
assert_eq!(iter_2.next_op_with_len(2).unwrap(), Operation::insert("12"));
|
|
|
assert_eq!(iter_2.next_op().unwrap(), Operation::insert("345"));
|
|
|
|
|
@@ -183,29 +183,29 @@ fn delta_get_ops_in_interval_7() {
|
|
|
|
|
|
#[test]
|
|
|
fn delta_op_seek() {
|
|
|
- let mut delta = RichTextDelta::default();
|
|
|
+ let mut delta = TextDelta::default();
|
|
|
let insert_a = Operation::insert("12345");
|
|
|
let retain_a = Operation::retain(3);
|
|
|
delta.add(insert_a.clone());
|
|
|
delta.add(retain_a.clone());
|
|
|
- let mut iter = DeltaIterator::new(&delta);
|
|
|
+ let mut iter = OperationIterator::new(&delta);
|
|
|
iter.seek::<OpMetric>(1);
|
|
|
assert_eq!(iter.next_op().unwrap(), retain_a);
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
|
fn delta_utf16_code_unit_seek() {
|
|
|
- let mut delta = RichTextDelta::default();
|
|
|
+ let mut delta = TextDelta::default();
|
|
|
delta.add(Operation::insert("12345"));
|
|
|
|
|
|
- let mut iter = DeltaIterator::new(&delta);
|
|
|
+ let mut iter = OperationIterator::new(&delta);
|
|
|
iter.seek::<Utf16CodeUnitMetric>(3);
|
|
|
assert_eq!(iter.next_op_with_len(2).unwrap(), Operation::insert("45"));
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
|
fn delta_utf16_code_unit_seek_with_attributes() {
|
|
|
- let mut delta = RichTextDelta::default();
|
|
|
+ let mut delta = TextDelta::default();
|
|
|
let attributes = AttributeBuilder::new()
|
|
|
.add_attr(TextAttribute::Bold(true))
|
|
|
.add_attr(TextAttribute::Italic(true))
|
|
@@ -214,7 +214,7 @@ fn delta_utf16_code_unit_seek_with_attributes() {
|
|
|
delta.add(Operation::insert_with_attributes("1234", attributes.clone()));
|
|
|
delta.add(Operation::insert("\n"));
|
|
|
|
|
|
- let mut iter = DeltaIterator::new(&delta);
|
|
|
+ let mut iter = OperationIterator::new(&delta);
|
|
|
iter.seek::<Utf16CodeUnitMetric>(0);
|
|
|
|
|
|
assert_eq!(
|
|
@@ -225,9 +225,9 @@ fn delta_utf16_code_unit_seek_with_attributes() {
|
|
|
|
|
|
#[test]
|
|
|
fn delta_next_op_len() {
|
|
|
- let mut delta = RichTextDelta::default();
|
|
|
+ let mut delta = TextDelta::default();
|
|
|
delta.add(Operation::insert("12345"));
|
|
|
- let mut iter = DeltaIterator::new(&delta);
|
|
|
+ let mut iter = OperationIterator::new(&delta);
|
|
|
assert_eq!(iter.next_op_with_len(2).unwrap(), Operation::insert("12"));
|
|
|
assert_eq!(iter.next_op_with_len(2).unwrap(), Operation::insert("34"));
|
|
|
assert_eq!(iter.next_op_with_len(2).unwrap(), Operation::insert("5"));
|
|
@@ -236,28 +236,28 @@ fn delta_next_op_len() {
|
|
|
|
|
|
#[test]
|
|
|
fn delta_next_op_len_with_chinese() {
|
|
|
- let mut delta = RichTextDelta::default();
|
|
|
+ let mut delta = TextDelta::default();
|
|
|
delta.add(Operation::insert("你好"));
|
|
|
|
|
|
- let mut iter = DeltaIterator::new(&delta);
|
|
|
+ let mut iter = OperationIterator::new(&delta);
|
|
|
assert_eq!(iter.next_op_len().unwrap(), 2);
|
|
|
assert_eq!(iter.next_op_with_len(2).unwrap(), Operation::insert("你好"));
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
|
fn delta_next_op_len_with_english() {
|
|
|
- let mut delta = RichTextDelta::default();
|
|
|
+ let mut delta = TextDelta::default();
|
|
|
delta.add(Operation::insert("ab"));
|
|
|
- let mut iter = DeltaIterator::new(&delta);
|
|
|
+ let mut iter = OperationIterator::new(&delta);
|
|
|
assert_eq!(iter.next_op_len().unwrap(), 2);
|
|
|
assert_eq!(iter.next_op_with_len(2).unwrap(), Operation::insert("ab"));
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
|
fn delta_next_op_len_after_seek() {
|
|
|
- let mut delta = RichTextDelta::default();
|
|
|
+ let mut delta = TextDelta::default();
|
|
|
delta.add(Operation::insert("12345"));
|
|
|
- let mut iter = DeltaIterator::new(&delta);
|
|
|
+ let mut iter = OperationIterator::new(&delta);
|
|
|
assert_eq!(iter.next_op_len().unwrap(), 5);
|
|
|
iter.seek::<Utf16CodeUnitMetric>(3);
|
|
|
assert_eq!(iter.next_op_len().unwrap(), 2);
|
|
@@ -268,9 +268,9 @@ fn delta_next_op_len_after_seek() {
|
|
|
|
|
|
#[test]
|
|
|
fn delta_next_op_len_none() {
|
|
|
- let mut delta = RichTextDelta::default();
|
|
|
+ let mut delta = TextDelta::default();
|
|
|
delta.add(Operation::insert("12345"));
|
|
|
- let mut iter = DeltaIterator::new(&delta);
|
|
|
+ let mut iter = OperationIterator::new(&delta);
|
|
|
|
|
|
assert_eq!(iter.next_op_len().unwrap(), 5);
|
|
|
assert_eq!(iter.next_op_with_len(5).unwrap(), Operation::insert("12345"));
|
|
@@ -279,21 +279,21 @@ fn delta_next_op_len_none() {
|
|
|
|
|
|
#[test]
|
|
|
fn delta_next_op_with_len_zero() {
|
|
|
- let mut delta = RichTextDelta::default();
|
|
|
+ let mut delta = TextDelta::default();
|
|
|
delta.add(Operation::insert("12345"));
|
|
|
- let mut iter = DeltaIterator::new(&delta);
|
|
|
+ let mut iter = OperationIterator::new(&delta);
|
|
|
assert_eq!(iter.next_op_with_len(0), None,);
|
|
|
assert_eq!(iter.next_op_len().unwrap(), 5);
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
|
fn delta_next_op_with_len_cross_op_return_last() {
|
|
|
- let mut delta = RichTextDelta::default();
|
|
|
+ let mut delta = TextDelta::default();
|
|
|
delta.add(Operation::insert("12345"));
|
|
|
delta.add(Operation::retain(1));
|
|
|
delta.add(Operation::insert("678"));
|
|
|
|
|
|
- let mut iter = DeltaIterator::new(&delta);
|
|
|
+ let mut iter = OperationIterator::new(&delta);
|
|
|
iter.seek::<Utf16CodeUnitMetric>(4);
|
|
|
assert_eq!(iter.next_op_len().unwrap(), 1);
|
|
|
assert_eq!(iter.next_op_with_len(2).unwrap(), Operation::retain(1));
|
|
@@ -301,7 +301,7 @@ fn delta_next_op_with_len_cross_op_return_last() {
|
|
|
|
|
|
#[test]
|
|
|
fn lengths() {
|
|
|
- let mut delta = RichTextDelta::default();
|
|
|
+ let mut delta = TextDelta::default();
|
|
|
assert_eq!(delta.utf16_base_len, 0);
|
|
|
assert_eq!(delta.utf16_target_len, 0);
|
|
|
delta.retain(5, TextAttributes::default());
|
|
@@ -319,7 +319,7 @@ fn lengths() {
|
|
|
}
|
|
|
#[test]
|
|
|
fn sequence() {
|
|
|
- let mut delta = RichTextDelta::default();
|
|
|
+ let mut delta = TextDelta::default();
|
|
|
delta.retain(5, TextAttributes::default());
|
|
|
delta.retain(0, TextAttributes::default());
|
|
|
delta.insert("appflowy", TextAttributes::default());
|
|
@@ -342,8 +342,8 @@ fn apply_1000() {
|
|
|
#[test]
|
|
|
fn apply_test() {
|
|
|
let s = "hello";
|
|
|
- let delta_a = TextDeltaBuilder::new().insert(s).build();
|
|
|
- let delta_b = TextDeltaBuilder::new().retain(s.len()).insert(", AppFlowy").build();
|
|
|
+ let delta_a = DeltaBuilder::new().insert(s).build();
|
|
|
+ let delta_b = DeltaBuilder::new().retain(s.len()).insert(", AppFlowy").build();
|
|
|
|
|
|
let after_a = delta_a.content().unwrap();
|
|
|
let after_b = delta_b.apply(&after_a).unwrap();
|
|
@@ -352,7 +352,7 @@ fn apply_test() {
|
|
|
|
|
|
#[test]
|
|
|
fn base_len_test() {
|
|
|
- let mut delta_a = RichTextDelta::default();
|
|
|
+ let mut delta_a = TextDelta::default();
|
|
|
delta_a.insert("a", TextAttributes::default());
|
|
|
delta_a.insert("b", TextAttributes::default());
|
|
|
delta_a.insert("c", TextAttributes::default());
|
|
@@ -381,7 +381,7 @@ fn invert() {
|
|
|
#[test]
|
|
|
fn invert_test() {
|
|
|
let s = "hello world";
|
|
|
- let delta = TextDeltaBuilder::new().insert(s).build();
|
|
|
+ let delta = DeltaBuilder::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);
|
|
@@ -391,7 +391,7 @@ fn invert_test() {
|
|
|
|
|
|
#[test]
|
|
|
fn empty_ops() {
|
|
|
- let mut delta = RichTextDelta::default();
|
|
|
+ let mut delta = TextDelta::default();
|
|
|
delta.retain(0, TextAttributes::default());
|
|
|
delta.insert("", TextAttributes::default());
|
|
|
delta.delete(0);
|
|
@@ -399,12 +399,12 @@ fn empty_ops() {
|
|
|
}
|
|
|
#[test]
|
|
|
fn eq() {
|
|
|
- let mut delta_a = RichTextDelta::default();
|
|
|
+ let mut delta_a = TextDelta::default();
|
|
|
delta_a.delete(1);
|
|
|
delta_a.insert("lo", TextAttributes::default());
|
|
|
delta_a.retain(2, TextAttributes::default());
|
|
|
delta_a.retain(3, TextAttributes::default());
|
|
|
- let mut delta_b = RichTextDelta::default();
|
|
|
+ let mut delta_b = TextDelta::default();
|
|
|
delta_b.delete(1);
|
|
|
delta_b.insert("l", TextAttributes::default());
|
|
|
delta_b.insert("o", TextAttributes::default());
|
|
@@ -416,7 +416,7 @@ fn eq() {
|
|
|
}
|
|
|
#[test]
|
|
|
fn ops_merging() {
|
|
|
- let mut delta = RichTextDelta::default();
|
|
|
+ let mut delta = TextDelta::default();
|
|
|
assert_eq!(delta.ops.len(), 0);
|
|
|
delta.retain(2, TextAttributes::default());
|
|
|
assert_eq!(delta.ops.len(), 1);
|
|
@@ -440,7 +440,7 @@ fn ops_merging() {
|
|
|
|
|
|
#[test]
|
|
|
fn is_noop() {
|
|
|
- let mut delta = RichTextDelta::default();
|
|
|
+ let mut delta = TextDelta::default();
|
|
|
assert!(delta.is_noop());
|
|
|
delta.retain(5, TextAttributes::default());
|
|
|
assert!(delta.is_noop());
|
|
@@ -488,7 +488,7 @@ fn transform_random_delta() {
|
|
|
|
|
|
#[test]
|
|
|
fn transform_with_two_delta() {
|
|
|
- let mut a = RichTextDelta::default();
|
|
|
+ let mut a = TextDelta::default();
|
|
|
let mut a_s = String::new();
|
|
|
a.insert(
|
|
|
"123",
|
|
@@ -497,7 +497,7 @@ fn transform_with_two_delta() {
|
|
|
a_s = a.apply(&a_s).unwrap();
|
|
|
assert_eq!(&a_s, "123");
|
|
|
|
|
|
- let mut b = RichTextDelta::default();
|
|
|
+ let mut b = TextDelta::default();
|
|
|
let mut b_s = String::new();
|
|
|
b.insert("456", TextAttributes::default());
|
|
|
b_s = b.apply(&b_s).unwrap();
|
|
@@ -587,10 +587,10 @@ fn transform_two_conflict_non_seq_delta() {
|
|
|
|
|
|
#[test]
|
|
|
fn delta_invert_no_attribute_delta() {
|
|
|
- let mut delta = RichTextDelta::default();
|
|
|
+ let mut delta = TextDelta::default();
|
|
|
delta.add(Operation::insert("123"));
|
|
|
|
|
|
- let mut change = RichTextDelta::default();
|
|
|
+ let mut change = TextDelta::default();
|
|
|
change.add(Operation::retain(3));
|
|
|
change.add(Operation::insert("456"));
|
|
|
let undo = change.invert(&delta);
|