| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 | 
							- 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);
 
-       },
 
-     }
 
-   }
 
- }
 
 
  |