| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 | 
							- use flowy_document::editor::{AppFlowyDocumentEditor, Document, DocumentTransaction};
 
- use flowy_document::entities::DocumentVersionPB;
 
- use flowy_test::helper::ViewTest;
 
- use flowy_test::FlowySDKTest;
 
- use lib_ot::core::{Changeset, NodeDataBuilder, NodeOperation, Path, Transaction};
 
- use lib_ot::text_delta::DeltaTextOperations;
 
- use std::sync::Arc;
 
- pub enum EditScript {
 
-     InsertText {
 
-         path: Path,
 
-         delta: DeltaTextOperations,
 
-     },
 
-     UpdateText {
 
-         path: Path,
 
-         delta: DeltaTextOperations,
 
-     },
 
-     #[allow(dead_code)]
 
-     ComposeTransaction {
 
-         transaction: Transaction,
 
-     },
 
-     ComposeTransactionStr {
 
-         transaction: &'static str,
 
-     },
 
-     Delete {
 
-         path: Path,
 
-     },
 
-     AssertContent {
 
-         expected: &'static str,
 
-     },
 
-     AssertPrettyContent {
 
-         expected: &'static str,
 
-     },
 
- }
 
- pub struct DocumentEditorTest {
 
-     pub sdk: FlowySDKTest,
 
-     pub editor: Arc<AppFlowyDocumentEditor>,
 
- }
 
- impl DocumentEditorTest {
 
-     pub async fn new() -> Self {
 
-         let version = DocumentVersionPB::V1;
 
-         let sdk = FlowySDKTest::new(version.clone());
 
-         let _ = sdk.init_user().await;
 
-         let test = ViewTest::new_document_view(&sdk).await;
 
-         let document_editor = sdk.document_manager.open_document_editor(&test.view.id).await.unwrap();
 
-         let editor = match document_editor.as_any().downcast_ref::<Arc<AppFlowyDocumentEditor>>() {
 
-             None => panic!(),
 
-             Some(editor) => editor.clone(),
 
-         };
 
-         Self { sdk, editor }
 
-     }
 
-     pub async fn run_scripts(&self, scripts: Vec<EditScript>) {
 
-         for script in scripts {
 
-             self.run_script(script).await;
 
-         }
 
-     }
 
-     async fn run_script(&self, script: EditScript) {
 
-         match script {
 
-             EditScript::InsertText { path, delta } => {
 
-                 let node_data = NodeDataBuilder::new("text").insert_delta(delta).build();
 
-                 let operation = NodeOperation::Insert {
 
-                     path,
 
-                     nodes: vec![node_data],
 
-                 };
 
-                 self.editor
 
-                     .apply_transaction(Transaction::from_operations(vec![operation]))
 
-                     .await
 
-                     .unwrap();
 
-             }
 
-             EditScript::UpdateText { path, delta } => {
 
-                 let inverted = delta.invert_str("");
 
-                 let changeset = Changeset::Delta { delta, inverted };
 
-                 let operation = NodeOperation::Update { path, changeset };
 
-                 self.editor
 
-                     .apply_transaction(Transaction::from_operations(vec![operation]))
 
-                     .await
 
-                     .unwrap();
 
-             }
 
-             EditScript::ComposeTransaction { transaction } => {
 
-                 self.editor.apply_transaction(transaction).await.unwrap();
 
-             }
 
-             EditScript::ComposeTransactionStr { transaction } => {
 
-                 let document_transaction = serde_json::from_str::<DocumentTransaction>(transaction).unwrap();
 
-                 let transaction: Transaction = document_transaction.into();
 
-                 self.editor.apply_transaction(transaction).await.unwrap();
 
-             }
 
-             EditScript::Delete { path } => {
 
-                 let operation = NodeOperation::Delete { path, nodes: vec![] };
 
-                 self.editor
 
-                     .apply_transaction(Transaction::from_operations(vec![operation]))
 
-                     .await
 
-                     .unwrap();
 
-             }
 
-             EditScript::AssertContent { expected } => {
 
-                 //
 
-                 let content = self.editor.get_content(false).await.unwrap();
 
-                 let expected_document: Document = serde_json::from_str(expected).unwrap();
 
-                 let expected = serde_json::to_string(&expected_document).unwrap();
 
-                 assert_eq!(content, expected);
 
-             }
 
-             EditScript::AssertPrettyContent { expected } => {
 
-                 //
 
-                 let content = self.editor.get_content(true).await.unwrap();
 
-                 assert_eq!(content, expected);
 
-             }
 
-         }
 
-     }
 
- }
 
 
  |