feat: edit working-checkout comparisons with normal editor actions
This commit is contained in:
+35
-16
@@ -76,7 +76,7 @@ fn type_query(session: &mut EditorSession, text: &str) {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn typed_diff_compares_disk_not_unsaved_buffers_and_preserves_undo() {
|
||||
fn typed_diff_edits_unsaved_working_after_and_preserves_undo_on_explicit_close() {
|
||||
let fixture = Fixture::new();
|
||||
fixture.git(&["init", "-q"]);
|
||||
let source = fixture.0.join("repo/buffer.rs");
|
||||
@@ -128,7 +128,12 @@ fn typed_diff_compares_disk_not_unsaved_buffers_and_preserves_undo() {
|
||||
let file = &comparison.files[0];
|
||||
assert_eq!(file.path, Path::new("buffer.rs"));
|
||||
assert_eq!(file.before, ["before"]);
|
||||
assert_eq!(file.after, ["after"]);
|
||||
assert_eq!(file.after, ["uafter", ""]);
|
||||
session.handle(Input::Char('\t'));
|
||||
assert_eq!(
|
||||
session.editor().diff().unwrap().focus,
|
||||
vamp::diff::Focus::Before
|
||||
);
|
||||
for input in [
|
||||
Input::Char('i'),
|
||||
Input::Char('x'),
|
||||
@@ -137,27 +142,41 @@ fn typed_diff_compares_disk_not_unsaved_buffers_and_preserves_undo() {
|
||||
session.handle(input);
|
||||
}
|
||||
session.handle(Input::Escape);
|
||||
assert!(
|
||||
!session
|
||||
.editor()
|
||||
.diff()
|
||||
.unwrap()
|
||||
.files
|
||||
.as_ref()
|
||||
.unwrap()
|
||||
.searching
|
||||
);
|
||||
session.handle(Input::Escape);
|
||||
assert!(session.editor().diff().is_none());
|
||||
assert!(session.editor().diff().is_some());
|
||||
assert_eq!(session.editor().context().text, "uafter\n");
|
||||
assert!(session.editor().dirty());
|
||||
assert_eq!(session.editor().cursor(), cursor);
|
||||
assert_eq!(fs::read_to_string(&source).unwrap(), "after\n");
|
||||
|
||||
session.handle(Input::Char('\t'));
|
||||
assert_eq!(
|
||||
session.editor().diff().unwrap().focus,
|
||||
vamp::diff::Focus::After
|
||||
);
|
||||
for input in [Input::Char('i'), Input::Char('x'), Input::Escape] {
|
||||
session.handle(input);
|
||||
}
|
||||
assert_eq!(session.editor().context().text, "xuafter\n");
|
||||
assert!(session.editor().diff().is_some());
|
||||
session.handle(Input::Char('u'));
|
||||
assert_eq!(session.editor().context().text, "uafter\n");
|
||||
session.handle(Input::Char('U'));
|
||||
assert_eq!(session.editor().context().text, "xuafter\n");
|
||||
session.execute("w");
|
||||
assert_eq!(fs::read_to_string(&source).unwrap(), "xuafter\n");
|
||||
assert!(!session.editor().dirty());
|
||||
session.handle(Input::Char('u'));
|
||||
assert_eq!(session.editor().context().text, "uafter\n");
|
||||
assert!(session.editor().dirty());
|
||||
|
||||
session.execute("diff.close");
|
||||
assert!(session.editor().diff().is_none());
|
||||
assert_eq!(session.editor().context().text, "uafter\n");
|
||||
session.handle(Input::Char('u'));
|
||||
assert_eq!(session.editor().context().text, "after\n");
|
||||
assert_eq!(fs::read_to_string(&source).unwrap(), "xuafter\n");
|
||||
session.execute(":diff");
|
||||
assert!(session.editor().diff().is_some());
|
||||
session.handle(Input::Escape);
|
||||
session.execute("diff.close");
|
||||
session.poll();
|
||||
assert!(session.editor().diff().is_none());
|
||||
assert_eq!(fixture.git(&["rev-parse", "HEAD"]), base);
|
||||
|
||||
Reference in New Issue
Block a user