Add test for go-to hunk and fix discovered bugs

This commit is contained in:
Julia
2022-10-28 15:08:13 -04:00
parent ae2021e073
commit 8361b4d47a
8 changed files with 145 additions and 72 deletions
+105 -5
View File
@@ -7,11 +7,11 @@ use unindent::Unindent;
use super::*;
use crate::test::{
assert_text_with_selections, build_editor, editor_git_test_context::EditorGitTestContext,
editor_lsp_test_context::EditorLspTestContext, editor_test_context::EditorTestContext,
select_ranges,
assert_text_with_selections, build_editor, editor_lsp_test_context::EditorLspTestContext,
editor_test_context::EditorTestContext, select_ranges,
};
use gpui::{
executor::Deterministic,
geometry::rect::RectF,
platform::{WindowBounds, WindowOptions},
};
@@ -5081,8 +5081,108 @@ fn test_combine_syntax_and_fuzzy_match_highlights() {
}
#[gpui::test]
fn go_to_hunk(cx: &mut gpui::TestAppContext) {
let mut cx = EditorGitTestContext::new(cx);
async fn go_to_hunk(deterministic: Arc<Deterministic>, cx: &mut gpui::TestAppContext) {
let mut cx = EditorTestContext::new(cx);
let diff_base = r#"
use some::mod;
const A: u32 = 42;
fn main() {
println!("hello");
println!("world");
}
"#
.unindent();
// Edits are modified, removed, modified, added
cx.set_state(
&r#"
use some::modified;
ˇ
fn main() {
println!("hello there");
println!("around the");
println!("world");
}
"#
.unindent(),
);
cx.set_diff_base(Some(&diff_base));
deterministic.run_until_parked();
cx.update_editor(|editor, cx| {
//Wrap around the bottom of the buffer
for _ in 0..3 {
editor.go_to_hunk(&GoToHunk, cx);
}
});
cx.assert_editor_state(
&r#"
ˇuse some::modified;
fn main() {
println!("hello there");
println!("around the");
println!("world");
}
"#
.unindent(),
);
cx.update_editor(|editor, cx| {
//Wrap around the top of the buffer
for _ in 0..2 {
editor.go_to_prev_hunk(&GoToPrevHunk, cx);
}
});
cx.assert_editor_state(
&r#"
use some::modified;
fn main() {
ˇ println!("hello there");
println!("around the");
println!("world");
}
"#
.unindent(),
);
cx.update_editor(|editor, cx| {
editor.fold(&Fold, cx);
//Make sure that the fold only gets one hunk
for _ in 0..4 {
editor.go_to_hunk(&GoToHunk, cx);
}
});
cx.assert_editor_state(
&r#"
ˇuse some::modified;
fn main() {
println!("hello there");
println!("around the");
println!("world");
}
"#
.unindent(),
);
}
fn empty_range(row: usize, column: usize) -> Range<DisplayPoint> {