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