| 
									
										
										
										
											2021-09-22 23:21:44 +08:00
										 |  |  | use crate::editor::{TestBuilder, TestOp::*};
 | 
					
						
							| 
									
										
										
										
											2021-11-19 13:13:50 +08:00
										 |  |  | use flowy_document_infra::core::{FlowyDoc, PlainDoc, RECORD_THRESHOLD};
 | 
					
						
							| 
									
										
										
										
											2021-11-19 14:38:11 +08:00
										 |  |  | use lib_ot::core::{Interval, NEW_LINE, WHITESPACE};
 | 
					
						
							| 
									
										
										
										
											2021-08-06 08:40:45 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | #[test]
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  | fn history_insert_undo() {
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |     let ops = vec![Insert(0, "123", 0), Undo(0), AssertDocJson(0, r#"[{"insert":"\n"}]"#)];
 | 
					
						
							| 
									
										
										
										
											2021-09-13 16:45:36 +08:00
										 |  |  |     TestBuilder::new().run_script::<FlowyDoc>(ops);
 | 
					
						
							| 
									
										
										
										
											2021-08-06 08:40:45 +08:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[test]
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  | fn history_insert_undo_with_lagging() {
 | 
					
						
							| 
									
										
										
										
											2021-08-06 08:40:45 +08:00
										 |  |  |     let ops = vec![
 | 
					
						
							|  |  |  |         Insert(0, "123", 0),
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:22:57 +08:00
										 |  |  |         Wait(RECORD_THRESHOLD),
 | 
					
						
							| 
									
										
										
										
											2021-08-06 08:40:45 +08:00
										 |  |  |         Insert(0, "456", 0),
 | 
					
						
							|  |  |  |         Undo(0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(0, r#"[{"insert":"123\n"}]"#),
 | 
					
						
							| 
									
										
										
										
											2021-08-06 08:40:45 +08:00
										 |  |  |         Undo(0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(0, r#"[{"insert":"\n"}]"#),
 | 
					
						
							| 
									
										
										
										
											2021-08-06 08:40:45 +08:00
										 |  |  |     ];
 | 
					
						
							| 
									
										
										
										
											2021-09-13 16:45:36 +08:00
										 |  |  |     TestBuilder::new().run_script::<FlowyDoc>(ops);
 | 
					
						
							| 
									
										
										
										
											2021-08-06 08:40:45 +08:00
										 |  |  | }
 | 
					
						
							| 
									
										
										
										
											2021-08-06 22:25:09 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | #[test]
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  | fn history_insert_redo() {
 | 
					
						
							| 
									
										
										
										
											2021-08-06 22:25:09 +08:00
										 |  |  |     let ops = vec![
 | 
					
						
							|  |  |  |         Insert(0, "123", 0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(0, r#"[{"insert":"123\n"}]"#),
 | 
					
						
							| 
									
										
										
										
											2021-08-06 22:25:09 +08:00
										 |  |  |         Undo(0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(0, r#"[{"insert":"\n"}]"#),
 | 
					
						
							| 
									
										
										
										
											2021-08-06 22:25:09 +08:00
										 |  |  |         Redo(0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(0, r#"[{"insert":"123\n"}]"#),
 | 
					
						
							| 
									
										
										
										
											2021-08-06 22:25:09 +08:00
										 |  |  |     ];
 | 
					
						
							| 
									
										
										
										
											2021-09-13 16:45:36 +08:00
										 |  |  |     TestBuilder::new().run_script::<FlowyDoc>(ops);
 | 
					
						
							| 
									
										
										
										
											2021-08-06 22:25:09 +08:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[test]
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  | fn history_insert_redo_with_lagging() {
 | 
					
						
							| 
									
										
										
										
											2021-08-06 22:25:09 +08:00
										 |  |  |     let ops = vec![
 | 
					
						
							|  |  |  |         Insert(0, "123", 0),
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:22:57 +08:00
										 |  |  |         Wait(RECORD_THRESHOLD),
 | 
					
						
							| 
									
										
										
										
											2021-08-06 22:25:09 +08:00
										 |  |  |         Insert(0, "456", 3),
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:22:57 +08:00
										 |  |  |         Wait(RECORD_THRESHOLD),
 | 
					
						
							| 
									
										
										
										
											2021-08-06 22:25:09 +08:00
										 |  |  |         AssertStr(0, "123456\n"),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(0, r#"[{"insert":"123456\n"}]"#),
 | 
					
						
							| 
									
										
										
										
											2021-08-06 22:25:09 +08:00
										 |  |  |         Undo(0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(0, r#"[{"insert":"123\n"}]"#),
 | 
					
						
							| 
									
										
										
										
											2021-08-06 22:25:09 +08:00
										 |  |  |         Redo(0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(0, r#"[{"insert":"123456\n"}]"#),
 | 
					
						
							| 
									
										
										
										
											2021-08-06 22:25:09 +08:00
										 |  |  |         Undo(0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(0, r#"[{"insert":"123\n"}]"#),
 | 
					
						
							| 
									
										
										
										
											2021-08-06 22:25:09 +08:00
										 |  |  |     ];
 | 
					
						
							| 
									
										
										
										
											2021-09-13 16:45:36 +08:00
										 |  |  |     TestBuilder::new().run_script::<FlowyDoc>(ops);
 | 
					
						
							| 
									
										
										
										
											2021-08-06 22:25:09 +08:00
										 |  |  | }
 | 
					
						
							| 
									
										
										
										
											2021-08-07 09:19:18 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | #[test]
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  | fn history_bold_undo() {
 | 
					
						
							| 
									
										
										
										
											2021-08-07 09:19:18 +08:00
										 |  |  |     let ops = vec![
 | 
					
						
							|  |  |  |         Insert(0, "123", 0),
 | 
					
						
							|  |  |  |         Bold(0, Interval::new(0, 3), true),
 | 
					
						
							|  |  |  |         Undo(0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(0, r#"[{"insert":"\n"}]"#),
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:22:57 +08:00
										 |  |  |     ];
 | 
					
						
							| 
									
										
										
										
											2021-09-13 16:45:36 +08:00
										 |  |  |     TestBuilder::new().run_script::<FlowyDoc>(ops);
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:22:57 +08:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[test]
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  | fn history_bold_undo_with_lagging() {
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:22:57 +08:00
										 |  |  |     let ops = vec![
 | 
					
						
							|  |  |  |         Insert(0, "123", 0),
 | 
					
						
							|  |  |  |         Wait(RECORD_THRESHOLD),
 | 
					
						
							|  |  |  |         Bold(0, Interval::new(0, 3), true),
 | 
					
						
							|  |  |  |         Undo(0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(0, r#"[{"insert":"123\n"}]"#),
 | 
					
						
							| 
									
										
										
										
											2021-08-07 09:19:18 +08:00
										 |  |  |     ];
 | 
					
						
							| 
									
										
										
										
											2021-09-13 16:45:36 +08:00
										 |  |  |     TestBuilder::new().run_script::<FlowyDoc>(ops);
 | 
					
						
							| 
									
										
										
										
											2021-08-07 09:19:18 +08:00
										 |  |  | }
 | 
					
						
							| 
									
										
										
										
											2021-08-08 22:29:16 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | #[test]
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  | fn history_bold_redo() {
 | 
					
						
							| 
									
										
										
										
											2021-08-08 22:29:16 +08:00
										 |  |  |     let ops = vec![
 | 
					
						
							|  |  |  |         Insert(0, "123", 0),
 | 
					
						
							|  |  |  |         Bold(0, Interval::new(0, 3), true),
 | 
					
						
							|  |  |  |         Undo(0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(0, r#"[{"insert":"\n"}]"#),
 | 
					
						
							| 
									
										
										
										
											2021-08-08 22:29:16 +08:00
										 |  |  |         Redo(0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(0, r#" [{"insert":"123","attributes":{"bold":"true"}},{"insert":"\n"}]"#),
 | 
					
						
							| 
									
										
										
										
											2021-08-08 22:29:16 +08:00
										 |  |  |     ];
 | 
					
						
							| 
									
										
										
										
											2021-09-13 16:45:36 +08:00
										 |  |  |     TestBuilder::new().run_script::<FlowyDoc>(ops);
 | 
					
						
							| 
									
										
										
										
											2021-08-08 22:29:16 +08:00
										 |  |  | }
 | 
					
						
							| 
									
										
										
										
											2021-08-09 11:29:37 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | #[test]
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  | fn history_bold_redo_with_lagging() {
 | 
					
						
							| 
									
										
										
										
											2021-08-09 11:29:37 +08:00
										 |  |  |     let ops = vec![
 | 
					
						
							|  |  |  |         Insert(0, "123", 0),
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:22:57 +08:00
										 |  |  |         Wait(RECORD_THRESHOLD),
 | 
					
						
							| 
									
										
										
										
											2021-08-09 11:29:37 +08:00
										 |  |  |         Bold(0, Interval::new(0, 3), true),
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:22:57 +08:00
										 |  |  |         Undo(0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(0, r#"[{"insert":"123\n"}]"#),
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:22:57 +08:00
										 |  |  |         Redo(0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(0, r#"[{"insert":"123","attributes":{"bold":"true"}},{"insert":"\n"}]"#),
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:22:57 +08:00
										 |  |  |     ];
 | 
					
						
							| 
									
										
										
										
											2021-09-13 16:45:36 +08:00
										 |  |  |     TestBuilder::new().run_script::<FlowyDoc>(ops);
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:22:57 +08:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[test]
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  | fn history_delete_undo() {
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:22:57 +08:00
										 |  |  |     let ops = vec![
 | 
					
						
							|  |  |  |         Insert(0, "123", 0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(0, r#"[{"insert":"123"}]"#),
 | 
					
						
							| 
									
										
										
										
											2021-08-09 11:29:37 +08:00
										 |  |  |         Delete(0, Interval::new(0, 3)),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(0, r#"[]"#),
 | 
					
						
							| 
									
										
										
										
											2021-08-09 11:29:37 +08:00
										 |  |  |         Undo(0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(0, r#"[{"insert":"123"}]"#),
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:22:57 +08:00
										 |  |  |     ];
 | 
					
						
							| 
									
										
										
										
											2021-09-13 16:45:36 +08:00
										 |  |  |     TestBuilder::new().run_script::<PlainDoc>(ops);
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:22:57 +08:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[test]
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  | fn history_delete_undo_2() {
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:22:57 +08:00
										 |  |  |     let ops = vec![
 | 
					
						
							|  |  |  |         Insert(0, "123", 0),
 | 
					
						
							|  |  |  |         Bold(0, Interval::new(0, 3), true),
 | 
					
						
							|  |  |  |         Delete(0, Interval::new(0, 1)),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(
 | 
					
						
							| 
									
										
										
										
											2021-08-09 11:29:37 +08:00
										 |  |  |             0,
 | 
					
						
							|  |  |  |             r#"[
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:22:57 +08:00
										 |  |  |             {"insert":"23","attributes":{"bold":"true"}},
 | 
					
						
							| 
									
										
										
										
											2021-08-09 11:29:37 +08:00
										 |  |  |             {"insert":"\n"}]
 | 
					
						
							|  |  |  |             "#,
 | 
					
						
							|  |  |  |         ),
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:22:57 +08:00
										 |  |  |         Undo(0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(0, r#"[{"insert":"\n"}]"#),
 | 
					
						
							| 
									
										
										
										
											2021-08-09 11:29:37 +08:00
										 |  |  |     ];
 | 
					
						
							| 
									
										
										
										
											2021-09-13 16:45:36 +08:00
										 |  |  |     TestBuilder::new().run_script::<FlowyDoc>(ops);
 | 
					
						
							| 
									
										
										
										
											2021-08-09 11:29:37 +08:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[test]
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  | fn history_delete_undo_with_lagging() {
 | 
					
						
							| 
									
										
										
										
											2021-08-09 11:29:37 +08:00
										 |  |  |     let ops = vec![
 | 
					
						
							|  |  |  |         Insert(0, "123", 0),
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:22:57 +08:00
										 |  |  |         Wait(RECORD_THRESHOLD),
 | 
					
						
							| 
									
										
										
										
											2021-08-09 11:29:37 +08:00
										 |  |  |         Bold(0, Interval::new(0, 3), true),
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:22:57 +08:00
										 |  |  |         Wait(RECORD_THRESHOLD),
 | 
					
						
							| 
									
										
										
										
											2021-08-09 11:29:37 +08:00
										 |  |  |         Delete(0, Interval::new(0, 1)),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(
 | 
					
						
							| 
									
										
										
										
											2021-08-09 11:29:37 +08:00
										 |  |  |             0,
 | 
					
						
							|  |  |  |             r#"[
 | 
					
						
							|  |  |  |             {"insert":"23","attributes":{"bold":"true"}},
 | 
					
						
							|  |  |  |             {"insert":"\n"}]
 | 
					
						
							|  |  |  |             "#,
 | 
					
						
							|  |  |  |         ),
 | 
					
						
							|  |  |  |         Undo(0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(
 | 
					
						
							| 
									
										
										
										
											2021-08-09 11:29:37 +08:00
										 |  |  |             0,
 | 
					
						
							|  |  |  |             r#"[
 | 
					
						
							|  |  |  |             {"insert":"123","attributes":{"bold":"true"}},
 | 
					
						
							|  |  |  |             {"insert":"\n"}]
 | 
					
						
							|  |  |  |             "#,
 | 
					
						
							|  |  |  |         ),
 | 
					
						
							|  |  |  |     ];
 | 
					
						
							| 
									
										
										
										
											2021-09-13 16:45:36 +08:00
										 |  |  |     TestBuilder::new().run_script::<FlowyDoc>(ops);
 | 
					
						
							| 
									
										
										
										
											2021-08-09 11:29:37 +08:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[test]
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  | fn history_delete_redo() {
 | 
					
						
							| 
									
										
										
										
											2021-08-09 11:29:37 +08:00
										 |  |  |     let ops = vec![
 | 
					
						
							|  |  |  |         Insert(0, "123", 0),
 | 
					
						
							| 
									
										
										
										
											2021-08-14 16:44:39 +08:00
										 |  |  |         Wait(RECORD_THRESHOLD),
 | 
					
						
							| 
									
										
										
										
											2021-08-09 11:29:37 +08:00
										 |  |  |         Delete(0, Interval::new(0, 3)),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(0, r#"[{"insert":"\n"}]"#),
 | 
					
						
							| 
									
										
										
										
											2021-08-09 11:29:37 +08:00
										 |  |  |         Undo(0),
 | 
					
						
							|  |  |  |         Redo(0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(0, r#"[{"insert":"\n"}]"#),
 | 
					
						
							| 
									
										
										
										
											2021-08-09 11:29:37 +08:00
										 |  |  |     ];
 | 
					
						
							| 
									
										
										
										
											2021-09-13 16:45:36 +08:00
										 |  |  |     TestBuilder::new().run_script::<FlowyDoc>(ops);
 | 
					
						
							| 
									
										
										
										
											2021-08-09 11:29:37 +08:00
										 |  |  | }
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:22:57 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | #[test]
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  | fn history_replace_undo() {
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:22:57 +08:00
										 |  |  |     let ops = vec![
 | 
					
						
							|  |  |  |         Insert(0, "123", 0),
 | 
					
						
							|  |  |  |         Bold(0, Interval::new(0, 3), true),
 | 
					
						
							|  |  |  |         Replace(0, Interval::new(0, 2), "ab"),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:22:57 +08:00
										 |  |  |             0,
 | 
					
						
							|  |  |  |             r#"[
 | 
					
						
							|  |  |  |             {"insert":"ab"},
 | 
					
						
							|  |  |  |             {"insert":"3","attributes":{"bold":"true"}},{"insert":"\n"}]
 | 
					
						
							|  |  |  |             "#,
 | 
					
						
							|  |  |  |         ),
 | 
					
						
							|  |  |  |         Undo(0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(0, r#"[{"insert":"\n"}]"#),
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:22:57 +08:00
										 |  |  |     ];
 | 
					
						
							| 
									
										
										
										
											2021-09-13 16:45:36 +08:00
										 |  |  |     TestBuilder::new().run_script::<FlowyDoc>(ops);
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:22:57 +08:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[test]
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  | fn history_replace_undo_with_lagging() {
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:22:57 +08:00
										 |  |  |     let ops = vec![
 | 
					
						
							|  |  |  |         Insert(0, "123", 0),
 | 
					
						
							|  |  |  |         Wait(RECORD_THRESHOLD),
 | 
					
						
							|  |  |  |         Bold(0, Interval::new(0, 3), true),
 | 
					
						
							|  |  |  |         Wait(RECORD_THRESHOLD),
 | 
					
						
							|  |  |  |         Replace(0, Interval::new(0, 2), "ab"),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:22:57 +08:00
										 |  |  |             0,
 | 
					
						
							|  |  |  |             r#"[
 | 
					
						
							|  |  |  |             {"insert":"ab"},
 | 
					
						
							|  |  |  |             {"insert":"3","attributes":{"bold":"true"}},{"insert":"\n"}]
 | 
					
						
							|  |  |  |             "#,
 | 
					
						
							|  |  |  |         ),
 | 
					
						
							|  |  |  |         Undo(0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(0, r#"[{"insert":"123","attributes":{"bold":"true"}},{"insert":"\n"}]"#),
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:22:57 +08:00
										 |  |  |     ];
 | 
					
						
							| 
									
										
										
										
											2021-09-13 16:45:36 +08:00
										 |  |  |     TestBuilder::new().run_script::<FlowyDoc>(ops);
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:22:57 +08:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[test]
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  | fn history_replace_redo() {
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:22:57 +08:00
										 |  |  |     let ops = vec![
 | 
					
						
							|  |  |  |         Insert(0, "123", 0),
 | 
					
						
							|  |  |  |         Bold(0, Interval::new(0, 3), true),
 | 
					
						
							|  |  |  |         Replace(0, Interval::new(0, 2), "ab"),
 | 
					
						
							|  |  |  |         Undo(0),
 | 
					
						
							|  |  |  |         Redo(0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:22:57 +08:00
										 |  |  |             0,
 | 
					
						
							|  |  |  |             r#"[
 | 
					
						
							|  |  |  |             {"insert":"ab"},
 | 
					
						
							|  |  |  |             {"insert":"3","attributes":{"bold":"true"}},{"insert":"\n"}]
 | 
					
						
							|  |  |  |             "#,
 | 
					
						
							|  |  |  |         ),
 | 
					
						
							|  |  |  |     ];
 | 
					
						
							| 
									
										
										
										
											2021-09-13 16:45:36 +08:00
										 |  |  |     TestBuilder::new().run_script::<FlowyDoc>(ops);
 | 
					
						
							| 
									
										
										
										
											2021-08-10 11:22:57 +08:00
										 |  |  | }
 | 
					
						
							| 
									
										
										
										
											2021-08-16 15:02:57 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | #[test]
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  | fn history_header_added_undo() {
 | 
					
						
							| 
									
										
										
										
											2021-08-16 15:02:57 +08:00
										 |  |  |     let ops = vec![
 | 
					
						
							|  |  |  |         Insert(0, "123456", 0),
 | 
					
						
							| 
									
										
										
										
											2021-09-13 15:51:13 +08:00
										 |  |  |         Header(0, Interval::new(0, 6), 1),
 | 
					
						
							| 
									
										
										
										
											2021-08-16 15:02:57 +08:00
										 |  |  |         Insert(0, "\n", 3),
 | 
					
						
							|  |  |  |         Insert(0, "\n", 4),
 | 
					
						
							|  |  |  |         Undo(0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(0, r#"[{"insert":"\n"}]"#),
 | 
					
						
							| 
									
										
										
										
											2021-08-16 15:02:57 +08:00
										 |  |  |         Redo(0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(
 | 
					
						
							| 
									
										
										
										
											2021-08-16 15:02:57 +08:00
										 |  |  |             0,
 | 
					
						
							| 
									
										
										
										
											2021-09-22 14:42:14 +08:00
										 |  |  |             r#"[{"insert":"123"},{"insert":"\n\n","attributes":{"header":1}},{"insert":"456"},{"insert":"\n","attributes":{"header":1}}]"#,
 | 
					
						
							| 
									
										
										
										
											2021-08-16 15:02:57 +08:00
										 |  |  |         ),
 | 
					
						
							|  |  |  |     ];
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-13 16:45:36 +08:00
										 |  |  |     TestBuilder::new().run_script::<FlowyDoc>(ops);
 | 
					
						
							| 
									
										
										
										
											2021-08-16 15:02:57 +08:00
										 |  |  | }
 | 
					
						
							| 
									
										
										
										
											2021-08-16 23:07:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | #[test]
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  | fn history_link_added_undo() {
 | 
					
						
							| 
									
										
										
										
											2021-08-16 23:07:40 +08:00
										 |  |  |     let site = "https://appflowy.io";
 | 
					
						
							|  |  |  |     let ops = vec![
 | 
					
						
							|  |  |  |         Insert(0, site, 0),
 | 
					
						
							|  |  |  |         Wait(RECORD_THRESHOLD),
 | 
					
						
							| 
									
										
										
										
											2021-09-13 15:51:13 +08:00
										 |  |  |         Link(0, Interval::new(0, site.len()), site),
 | 
					
						
							| 
									
										
										
										
											2021-08-16 23:07:40 +08:00
										 |  |  |         Undo(0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(0, r#"[{"insert":"https://appflowy.io\n"}]"#),
 | 
					
						
							| 
									
										
										
										
											2021-08-16 23:07:40 +08:00
										 |  |  |         Redo(0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(
 | 
					
						
							| 
									
										
										
										
											2021-08-16 23:07:40 +08:00
										 |  |  |             0,
 | 
					
						
							|  |  |  |             r#"[{"insert":"https://appflowy.io","attributes":{"link":"https://appflowy.io"}},{"insert":"\n"}]"#,
 | 
					
						
							|  |  |  |         ),
 | 
					
						
							|  |  |  |     ];
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-13 16:45:36 +08:00
										 |  |  |     TestBuilder::new().run_script::<FlowyDoc>(ops);
 | 
					
						
							| 
									
										
										
										
											2021-08-16 23:07:40 +08:00
										 |  |  | }
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | #[test]
 | 
					
						
							|  |  |  | fn history_link_auto_format_undo_with_lagging() {
 | 
					
						
							|  |  |  |     let site = "https://appflowy.io";
 | 
					
						
							|  |  |  |     let ops = vec![
 | 
					
						
							|  |  |  |         Insert(0, site, 0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(0, r#"[{"insert":"https://appflowy.io\n"}]"#),
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  |         Wait(RECORD_THRESHOLD),
 | 
					
						
							|  |  |  |         Insert(0, WHITESPACE, site.len()),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  |             0,
 | 
					
						
							|  |  |  |             r#"[{"insert":"https://appflowy.io","attributes":{"link":"https://appflowy.io/"}},{"insert":" \n"}]"#,
 | 
					
						
							|  |  |  |         ),
 | 
					
						
							|  |  |  |         Undo(0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(0, r#"[{"insert":"https://appflowy.io\n"}]"#),
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  |     ];
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-13 16:45:36 +08:00
										 |  |  |     TestBuilder::new().run_script::<FlowyDoc>(ops);
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[test]
 | 
					
						
							|  |  |  | fn history_bullet_undo() {
 | 
					
						
							|  |  |  |     let ops = vec![
 | 
					
						
							|  |  |  |         Insert(0, "1", 0),
 | 
					
						
							|  |  |  |         Bullet(0, Interval::new(0, 1), true),
 | 
					
						
							|  |  |  |         Insert(0, NEW_LINE, 1),
 | 
					
						
							|  |  |  |         Insert(0, "2", 2),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  |             0,
 | 
					
						
							| 
									
										
										
										
											2021-09-15 20:19:16 +08:00
										 |  |  |             r#"[{"insert":"1"},{"insert":"\n","attributes":{"list":"bullet"}},{"insert":"2"},{"insert":"\n","attributes":{"list":"bullet"}}]"#,
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  |         ),
 | 
					
						
							|  |  |  |         Undo(0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(0, r#"[{"insert":"\n"}]"#),
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  |         Redo(0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  |             0,
 | 
					
						
							| 
									
										
										
										
											2021-09-15 20:19:16 +08:00
										 |  |  |             r#"[{"insert":"1"},{"insert":"\n","attributes":{"list":"bullet"}},{"insert":"2"},{"insert":"\n","attributes":{"list":"bullet"}}]"#,
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  |         ),
 | 
					
						
							|  |  |  |     ];
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-13 16:45:36 +08:00
										 |  |  |     TestBuilder::new().run_script::<FlowyDoc>(ops);
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[test]
 | 
					
						
							|  |  |  | fn history_bullet_undo_with_lagging() {
 | 
					
						
							|  |  |  |     let ops = vec![
 | 
					
						
							|  |  |  |         Insert(0, "1", 0),
 | 
					
						
							|  |  |  |         Bullet(0, Interval::new(0, 1), true),
 | 
					
						
							|  |  |  |         Wait(RECORD_THRESHOLD),
 | 
					
						
							|  |  |  |         Insert(0, NEW_LINE, 1),
 | 
					
						
							|  |  |  |         Insert(0, "2", 2),
 | 
					
						
							|  |  |  |         Wait(RECORD_THRESHOLD),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  |             0,
 | 
					
						
							| 
									
										
										
										
											2021-09-15 20:19:16 +08:00
										 |  |  |             r#"[{"insert":"1"},{"insert":"\n","attributes":{"list":"bullet"}},{"insert":"2"},{"insert":"\n","attributes":{"list":"bullet"}}]"#,
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  |         ),
 | 
					
						
							|  |  |  |         Undo(0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(0, r#"[{"insert":"1"},{"insert":"\n","attributes":{"list":"bullet"}}]"#),
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  |         Undo(0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(0, r#"[{"insert":"\n"}]"#),
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  |         Redo(0),
 | 
					
						
							|  |  |  |         Redo(0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  |             0,
 | 
					
						
							| 
									
										
										
										
											2021-09-15 20:19:16 +08:00
										 |  |  |             r#"[{"insert":"1"},{"insert":"\n","attributes":{"list":"bullet"}},{"insert":"2"},{"insert":"\n","attributes":{"list":"bullet"}}]"#,
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  |         ),
 | 
					
						
							|  |  |  |     ];
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-13 16:45:36 +08:00
										 |  |  |     TestBuilder::new().run_script::<FlowyDoc>(ops);
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[test]
 | 
					
						
							|  |  |  | fn history_undo_attribute_on_merge_between_line() {
 | 
					
						
							|  |  |  |     let ops = vec![
 | 
					
						
							|  |  |  |         Insert(0, "123456", 0),
 | 
					
						
							|  |  |  |         Bullet(0, Interval::new(0, 6), true),
 | 
					
						
							|  |  |  |         Wait(RECORD_THRESHOLD),
 | 
					
						
							|  |  |  |         Insert(0, NEW_LINE, 3),
 | 
					
						
							|  |  |  |         Wait(RECORD_THRESHOLD),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  |             0,
 | 
					
						
							| 
									
										
										
										
											2021-09-15 20:19:16 +08:00
										 |  |  |             r#"[{"insert":"123"},{"insert":"\n","attributes":{"list":"bullet"}},{"insert":"456"},{"insert":"\n","attributes":{"list":"bullet"}}]"#,
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  |         ),
 | 
					
						
							|  |  |  |         Delete(0, Interval::new(3, 4)), // delete the newline
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(
 | 
					
						
							|  |  |  |             0,
 | 
					
						
							|  |  |  |             r#"[{"insert":"123456"},{"insert":"\n","attributes":{"list":"bullet"}}]"#,
 | 
					
						
							|  |  |  |         ),
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  |         Undo(0),
 | 
					
						
							| 
									
										
										
										
											2021-09-26 16:39:57 +08:00
										 |  |  |         AssertDocJson(
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  |             0,
 | 
					
						
							| 
									
										
										
										
											2021-09-15 20:19:16 +08:00
										 |  |  |             r#"[{"insert":"123"},{"insert":"\n","attributes":{"list":"bullet"}},{"insert":"456"},{"insert":"\n","attributes":{"list":"bullet"}}]"#,
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  |         ),
 | 
					
						
							|  |  |  |     ];
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-13 16:45:36 +08:00
										 |  |  |     TestBuilder::new().run_script::<FlowyDoc>(ops);
 | 
					
						
							| 
									
										
										
										
											2021-08-18 13:12:45 +08:00
										 |  |  | }
 |