Files
galaxy/app/src/code_review/merge_conflicts_tests.rs
T

55 lines
2.1 KiB
Rust

use super::{parse_conflicts, resolve_conflict, ConflictResolution};
#[test]
fn parses_multiple_conflicts_and_optional_base() {
let text = "before\n<<<<<<< HEAD\nours\n||||||| base\nbase\n=======\ntheirs\n>>>>>>> feature\nafter\n<<<<<<< HEAD\nleft\n=======\nright\n>>>>>>> feature\n";
let conflicts = parse_conflicts(text);
assert_eq!(conflicts.len(), 2);
assert_eq!(conflicts[0].start_line, 2);
assert_eq!(conflicts[0].ours, "ours\n");
assert_eq!(conflicts[0].base.as_deref(), Some("base\n"));
assert_eq!(conflicts[0].theirs, "theirs\n");
assert_eq!(conflicts[1].base, None);
}
#[test]
fn ignores_incomplete_conflict_blocks() {
let text = "before\n<<<<<<< HEAD\nours\n=======\ntheirs\n";
assert!(parse_conflicts(text).is_empty());
}
#[test]
fn resolves_a_conflict_using_byte_ranges() {
let text = "prefix\n<<<<<<< HEAD\n\n=======\n\n>>>>>>> feature\nsuffix\n";
let (range, replacement) = resolve_conflict(text, 0, ConflictResolution::Theirs)
.expect("complete conflict should resolve");
assert_eq!(
&text[range],
"<<<<<<< HEAD\n\n=======\n\n>>>>>>> feature\n"
);
assert_eq!(replacement, "右\n");
}
#[test]
fn smart_merge_prefers_the_changed_side_when_other_side_matches_base() {
let text = "<<<<<<< HEAD\nbase\n||||||| base\nbase\n=======\nchanged\n>>>>>>> feature\n";
let (_, replacement) = resolve_conflict(text, 0, ConflictResolution::Smart).unwrap();
assert_eq!(replacement, "changed\n");
}
#[test]
fn smart_merge_preserves_both_for_divergent_changes() {
let text = "<<<<<<< HEAD\nours\n||||||| base\nbase\n=======\ntheirs\n>>>>>>> feature\n";
let (_, replacement) = resolve_conflict(text, 0, ConflictResolution::Smart).unwrap();
assert_eq!(replacement, "ours\ntheirs\n");
}
#[test]
fn smart_merge_combines_non_overlapping_line_edits() {
let text = "<<<<<<< HEAD\none\nours-two\nthree\n||||||| base\none\ntwo\nthree\n=======\none\ntwo\ntheirs-three\n>>>>>>> feature\n";
let (_, replacement) = resolve_conflict(text, 0, ConflictResolution::Smart).unwrap();
assert_eq!(replacement, "one\nours-two\ntheirs-three\n");
}