test_following_with_multiple_excerpts (passes)

Piotr Osiewicz created

Change summary

crates/editor2/src/editor_tests.rs | 314 ++++++++++++++++---------------
1 file changed, 158 insertions(+), 156 deletions(-)

Detailed changes

crates/editor2/src/editor_tests.rs 🔗

@@ -12,7 +12,7 @@ use futures::StreamExt;
 use gpui::{
     div,
     serde_json::{self, json},
-    Div, TestAppContext, VisualTestContext, WindowBounds, WindowOptions,
+    Div, Flatten, TestAppContext, VisualTestContext, WindowBounds, WindowOptions,
 };
 use indoc::indoc;
 use language::{
@@ -6571,170 +6571,172 @@ async fn test_following(cx: &mut gpui::TestAppContext) {
     assert_eq!(*is_still_following.borrow(), false);
 }
 
-// #[gpui::test]
-// async fn test_following_with_multiple_excerpts(cx: &mut gpui::TestAppContext) {
-//     init_test(cx, |_| {});
+#[gpui::test]
+async fn test_following_with_multiple_excerpts(cx: &mut gpui::TestAppContext) {
+    init_test(cx, |_| {});
 
-//     let fs = FakeFs::new(cx.executor());
-//     let project = Project::test(fs, ["/file.rs".as_ref()], cx).await;
-//     let workspace = cx.add_window(|cx| Workspace::test_new(project.clone(), cx));
-//     let pane = workspace
-//         .update(cx, |workspace, _| workspace.active_pane().clone())
-//         .unwrap();
+    let fs = FakeFs::new(cx.executor());
+    let project = Project::test(fs, ["/file.rs".as_ref()], cx).await;
+    let workspace = cx.add_window(|cx| Workspace::test_new(project.clone(), cx));
+    let pane = workspace
+        .update(cx, |workspace, _| workspace.active_pane().clone())
+        .unwrap();
 
-//     let cx = &mut VisualTestContext::from_window(*workspace.deref(), cx);
+    let cx = &mut VisualTestContext::from_window(*workspace.deref(), cx);
 
-//     let leader = pane.update(cx, |_, cx| {
-//         let multibuffer = cx.build_model(|_| MultiBuffer::new(0));
-//         cx.build_view(|cx| build_editor(multibuffer.clone(), cx))
-//     });
+    let leader = pane.update(cx, |_, cx| {
+        let multibuffer = cx.build_model(|_| MultiBuffer::new(0));
+        cx.build_view(|cx| build_editor(multibuffer.clone(), cx))
+    });
 
-//     // Start following the editor when it has no excerpts.
-//     let mut state_message = leader.update(cx, |leader, cx| leader.to_state_proto(cx));
-//     let follower_1 = cx
-//         .update(|cx| {
-//             Editor::from_state_proto(
-//                 pane.clone(),
-//                 workspace.root_view(cx).unwrap(),
-//                 ViewId {
-//                     creator: Default::default(),
-//                     id: 0,
-//                 },
-//                 &mut state_message,
-//                 cx,
-//             )
-//         })
-//         .unwrap()
-//         .await
-//         .unwrap();
-
-//     let update_message = Rc::new(RefCell::new(None));
-//     follower_1.update(cx, {
-//         let update = update_message.clone();
-//         |_, cx| {
-//             cx.subscribe(&leader, move |_, leader, event, cx| {
-//                 leader
-//                     .read(cx)
-//                     .add_event_to_update_proto(event, &mut *update.borrow_mut(), cx);
-//             })
-//             .detach();
-//         }
-//     });
+    // Start following the editor when it has no excerpts.
+    let mut state_message = leader.update(cx, |leader, cx| leader.to_state_proto(cx));
+    let follower_1 = cx
+        .update_window(*workspace.deref(), |_, cx| {
+            Editor::from_state_proto(
+                pane.clone(),
+                workspace.root_view(cx).unwrap(),
+                ViewId {
+                    creator: Default::default(),
+                    id: 0,
+                },
+                &mut state_message,
+                cx,
+            )
+        })
+        .unwrap()
+        .unwrap()
+        .await
+        .unwrap();
 
-//     let (buffer_1, buffer_2) = project.update(cx, |project, cx| {
-//         (
-//             project
-//                 .create_buffer("abc\ndef\nghi\njkl\n", None, cx)
-//                 .unwrap(),
-//             project
-//                 .create_buffer("mno\npqr\nstu\nvwx\n", None, cx)
-//                 .unwrap(),
-//         )
-//     });
+    let update_message = Rc::new(RefCell::new(None));
+    follower_1.update(cx, {
+        let update = update_message.clone();
+        |_, cx| {
+            cx.subscribe(&leader, move |_, leader, event, cx| {
+                leader
+                    .read(cx)
+                    .add_event_to_update_proto(event, &mut *update.borrow_mut(), cx);
+            })
+            .detach();
+        }
+    });
 
-//     // Insert some excerpts.
-//     leader.update(cx, |leader, cx| {
-//         leader.buffer.update(cx, |multibuffer, cx| {
-//             let excerpt_ids = multibuffer.push_excerpts(
-//                 buffer_1.clone(),
-//                 [
-//                     ExcerptRange {
-//                         context: 1..6,
-//                         primary: None,
-//                     },
-//                     ExcerptRange {
-//                         context: 12..15,
-//                         primary: None,
-//                     },
-//                     ExcerptRange {
-//                         context: 0..3,
-//                         primary: None,
-//                     },
-//                 ],
-//                 cx,
-//             );
-//             multibuffer.insert_excerpts_after(
-//                 excerpt_ids[0],
-//                 buffer_2.clone(),
-//                 [
-//                     ExcerptRange {
-//                         context: 8..12,
-//                         primary: None,
-//                     },
-//                     ExcerptRange {
-//                         context: 0..6,
-//                         primary: None,
-//                     },
-//                 ],
-//                 cx,
-//             );
-//         });
-//     });
+    let (buffer_1, buffer_2) = project.update(cx, |project, cx| {
+        (
+            project
+                .create_buffer("abc\ndef\nghi\njkl\n", None, cx)
+                .unwrap(),
+            project
+                .create_buffer("mno\npqr\nstu\nvwx\n", None, cx)
+                .unwrap(),
+        )
+    });
 
-//     // Apply the update of adding the excerpts.
-//     follower_1
-//         .update(cx, |follower, cx| {
-//             follower.apply_update_proto(&project, update_message.borrow().clone().unwrap(), cx)
-//         })
-//         .await
-//         .unwrap();
-//     assert_eq!(
-//         follower_1.update(cx, |editor, cx| editor.text(cx)),
-//         leader.update(cx, |editor, cx| editor.text(cx))
-//     );
-//     update_message.borrow_mut().take();
-
-//     // Start following separately after it already has excerpts.
-//     let mut state_message = leader.update(cx, |leader, cx| leader.to_state_proto(cx));
-//     let follower_2 = cx
-//         .update(|cx| {
-//             Editor::from_state_proto(
-//                 pane.clone(),
-//                 workspace.clone(),
-//                 ViewId {
-//                     creator: Default::default(),
-//                     id: 0,
-//                 },
-//                 &mut state_message,
-//                 cx,
-//             )
-//         })
-//         .unwrap()
-//         .await
-//         .unwrap();
-//     assert_eq!(
-//         follower_2.update(cx, |editor, cx| editor.text(cx)),
-//         leader.update(cx, |editor, cx| editor.text(cx))
-//     );
+    // Insert some excerpts.
+    leader.update(cx, |leader, cx| {
+        leader.buffer.update(cx, |multibuffer, cx| {
+            let excerpt_ids = multibuffer.push_excerpts(
+                buffer_1.clone(),
+                [
+                    ExcerptRange {
+                        context: 1..6,
+                        primary: None,
+                    },
+                    ExcerptRange {
+                        context: 12..15,
+                        primary: None,
+                    },
+                    ExcerptRange {
+                        context: 0..3,
+                        primary: None,
+                    },
+                ],
+                cx,
+            );
+            multibuffer.insert_excerpts_after(
+                excerpt_ids[0],
+                buffer_2.clone(),
+                [
+                    ExcerptRange {
+                        context: 8..12,
+                        primary: None,
+                    },
+                    ExcerptRange {
+                        context: 0..6,
+                        primary: None,
+                    },
+                ],
+                cx,
+            );
+        });
+    });
 
-//     // Remove some excerpts.
-//     leader.update(cx, |leader, cx| {
-//         leader.buffer.update(cx, |multibuffer, cx| {
-//             let excerpt_ids = multibuffer.excerpt_ids();
-//             multibuffer.remove_excerpts([excerpt_ids[1], excerpt_ids[2]], cx);
-//             multibuffer.remove_excerpts([excerpt_ids[0]], cx);
-//         });
-//     });
+    // Apply the update of adding the excerpts.
+    follower_1
+        .update(cx, |follower, cx| {
+            follower.apply_update_proto(&project, update_message.borrow().clone().unwrap(), cx)
+        })
+        .await
+        .unwrap();
+    assert_eq!(
+        follower_1.update(cx, |editor, cx| editor.text(cx)),
+        leader.update(cx, |editor, cx| editor.text(cx))
+    );
+    update_message.borrow_mut().take();
+
+    // Start following separately after it already has excerpts.
+    let mut state_message = leader.update(cx, |leader, cx| leader.to_state_proto(cx));
+    let follower_2 = cx
+        .update_window(*workspace.deref(), |_, cx| {
+            Editor::from_state_proto(
+                pane.clone(),
+                workspace.root_view(cx).unwrap().clone(),
+                ViewId {
+                    creator: Default::default(),
+                    id: 0,
+                },
+                &mut state_message,
+                cx,
+            )
+        })
+        .unwrap()
+        .unwrap()
+        .await
+        .unwrap();
+    assert_eq!(
+        follower_2.update(cx, |editor, cx| editor.text(cx)),
+        leader.update(cx, |editor, cx| editor.text(cx))
+    );
 
-//     // Apply the update of removing the excerpts.
-//     follower_1
-//         .update(cx, |follower, cx| {
-//             follower.apply_update_proto(&project, update_message.borrow().clone().unwrap(), cx)
-//         })
-//         .await
-//         .unwrap();
-//     follower_2
-//         .update(cx, |follower, cx| {
-//             follower.apply_update_proto(&project, update_message.borrow().clone().unwrap(), cx)
-//         })
-//         .await
-//         .unwrap();
-//     update_message.borrow_mut().take();
-//     assert_eq!(
-//         follower_1.update(cx, |editor, cx| editor.text(cx)),
-//         leader.update(cx, |editor, cx| editor.text(cx))
-//     );
-// }
+    // Remove some excerpts.
+    leader.update(cx, |leader, cx| {
+        leader.buffer.update(cx, |multibuffer, cx| {
+            let excerpt_ids = multibuffer.excerpt_ids();
+            multibuffer.remove_excerpts([excerpt_ids[1], excerpt_ids[2]], cx);
+            multibuffer.remove_excerpts([excerpt_ids[0]], cx);
+        });
+    });
+
+    // Apply the update of removing the excerpts.
+    follower_1
+        .update(cx, |follower, cx| {
+            follower.apply_update_proto(&project, update_message.borrow().clone().unwrap(), cx)
+        })
+        .await
+        .unwrap();
+    follower_2
+        .update(cx, |follower, cx| {
+            follower.apply_update_proto(&project, update_message.borrow().clone().unwrap(), cx)
+        })
+        .await
+        .unwrap();
+    update_message.borrow_mut().take();
+    assert_eq!(
+        follower_1.update(cx, |editor, cx| editor.text(cx)),
+        leader.update(cx, |editor, cx| editor.text(cx))
+    );
+}
 
 #[gpui::test]
 async fn go_to_prev_overlapping_diagnostic(