Add assertions about Dirtied events in test

Max Brunsfeld created

Change summary

zed/src/editor/buffer/mod.rs | 76 ++++++++++++++++++++++++++++++++-----
1 file changed, 65 insertions(+), 11 deletions(-)

Detailed changes

zed/src/editor/buffer/mod.rs 🔗

@@ -1982,6 +1982,7 @@ mod tests {
     use super::*;
     use gpui::App;
     use std::collections::BTreeMap;
+    use std::{cell::RefCell, rc::Rc};
 
     #[test]
     fn test_edit() -> Result<()> {
@@ -2003,8 +2004,6 @@ mod tests {
 
     #[test]
     fn test_edit_events() {
-        use std::{cell::RefCell, rc::Rc};
-
         App::test((), |mut app| async move {
             let buffer_1_events = Rc::new(RefCell::new(Vec::new()));
             let buffer_2_events = Rc::new(RefCell::new(Vec::new()));
@@ -2524,31 +2523,86 @@ mod tests {
     fn test_is_modified() -> Result<()> {
         App::test((), |mut app| async move {
             let model = app.add_model(|_| Buffer::new(0, "abc"));
+            let events = Rc::new(RefCell::new(Vec::new()));
+
+            // initially, the buffer isn't dirty.
             model.update(&mut app, |buffer, ctx| {
-                // initially, buffer isn't modified.
+                ctx.subscribe(&model, {
+                    let events = events.clone();
+                    move |_, event, _| events.borrow_mut().push(event.clone())
+                });
+
                 assert!(!buffer.is_dirty());
+                assert!(events.borrow().is_empty());
+
+                buffer.edit(vec![1..2], "", Some(ctx)).unwrap();
+            });
 
-                // after editing, buffer is modified.
-                buffer.edit(vec![1..2], "", None).unwrap();
+            // after the first edit, the buffer is dirty, and emits a dirtied event.
+            model.update(&mut app, |buffer, ctx| {
                 assert!(buffer.text() == "ac");
                 assert!(buffer.is_dirty());
+                assert_eq!(
+                    *events.borrow(),
+                    &[
+                        Event::Edited(vec![Edit {
+                            old_range: 1..2,
+                            new_range: 1..1
+                        }]),
+                        Event::Dirtied
+                    ]
+                );
+                events.borrow_mut().clear();
 
-                // after saving, buffer is not modified.
                 buffer.did_save(buffer.version(), ctx);
+            });
+
+            // after saving, the buffer is not dirty, and emits a saved event.
+            model.update(&mut app, |buffer, ctx| {
                 assert!(!buffer.is_dirty());
+                assert_eq!(*events.borrow(), &[Event::Saved]);
+                events.borrow_mut().clear();
+
+                buffer.edit(vec![1..1], "B", Some(ctx)).unwrap();
+                buffer.edit(vec![2..2], "D", Some(ctx)).unwrap();
+            });
 
-                // after editing again, buffer is modified.
-                buffer.edit(vec![1..1], "B", None).unwrap();
-                buffer.edit(vec![2..2], "D", None).unwrap();
+            // after editing again, the buffer is dirty, and emits another dirty event.
+            model.update(&mut app, |buffer, ctx| {
                 assert!(buffer.text() == "aBDc");
                 assert!(buffer.is_dirty());
+                assert_eq!(
+                    *events.borrow(),
+                    &[
+                        Event::Edited(vec![Edit {
+                            old_range: 1..1,
+                            new_range: 1..2
+                        }]),
+                        Event::Dirtied,
+                        Event::Edited(vec![Edit {
+                            old_range: 2..2,
+                            new_range: 2..3
+                        }]),
+                    ],
+                );
+                events.borrow_mut().clear();
 
                 // TODO - currently, after restoring the buffer to its
-                // saved state, it is still considered modified.
-                buffer.edit(vec![1..3], "", None).unwrap();
+                // previously-saved state, the is still considered dirty.
+                buffer.edit(vec![1..3], "", Some(ctx)).unwrap();
                 assert!(buffer.text() == "ac");
                 assert!(buffer.is_dirty());
             });
+
+            model.update(&mut app, |_, _| {
+                assert_eq!(
+                    *events.borrow(),
+                    &[Event::Edited(vec![Edit {
+                        old_range: 1..3,
+                        new_range: 1..1
+                    },])]
+                );
+            });
         });
         Ok(())
     }