mirror of
https://github.com/martinvonz/jj.git
synced 2025-02-06 03:22:59 +00:00
files: add more multi-hunk tests
We seemed to have poor coverage of merges affecting multiple hunks, so I added a few. Thanks to @quark-zju for providing the last of them.
This commit is contained in:
parent
1c284322b3
commit
28d3ad6f1d
1 changed files with 79 additions and 12 deletions
|
@ -263,7 +263,7 @@ mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_merge() {
|
fn test_merge_single_hunk() {
|
||||||
// Unchanged and empty on all sides
|
// Unchanged and empty on all sides
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
merge(&[b""], &[b"", b""]),
|
merge(&[b""], &[b"", b""]),
|
||||||
|
@ -330,17 +330,6 @@ mod tests {
|
||||||
merge(&[b"a", b"a"], &[b"b", b"b", b"b"]),
|
merge(&[b"a", b"a"], &[b"b", b"b", b"b"]),
|
||||||
MergeResult::Resolved(b"b".to_vec())
|
MergeResult::Resolved(b"b".to_vec())
|
||||||
);
|
);
|
||||||
// Two sides left one line unchanged, and added conflicting additional lines
|
|
||||||
assert_eq!(
|
|
||||||
merge(&[b"a\n"], &[b"a\nb\n", b"a\nc\n"]),
|
|
||||||
MergeResult::Conflict(vec![
|
|
||||||
MergeHunk::Resolved(b"a\n".to_vec()),
|
|
||||||
MergeHunk::Conflict(ConflictHunk {
|
|
||||||
removes: vec![b"".to_vec()],
|
|
||||||
adds: vec![b"b\n".to_vec(), b"c\n".to_vec()]
|
|
||||||
})
|
|
||||||
])
|
|
||||||
);
|
|
||||||
// One side removed, one side modified
|
// One side removed, one side modified
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
merge(&[b"a\n"], &[b"", b"b\n"]),
|
merge(&[b"a\n"], &[b"", b"b\n"]),
|
||||||
|
@ -410,4 +399,82 @@ mod tests {
|
||||||
})])
|
})])
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_merge_multi_hunk() {
|
||||||
|
// Two sides left one line unchanged, and added conflicting additional lines
|
||||||
|
assert_eq!(
|
||||||
|
merge(&[b"a\n"], &[b"a\nb\n", b"a\nc\n"]),
|
||||||
|
MergeResult::Conflict(vec![
|
||||||
|
MergeHunk::Resolved(b"a\n".to_vec()),
|
||||||
|
MergeHunk::Conflict(ConflictHunk {
|
||||||
|
removes: vec![b"".to_vec()],
|
||||||
|
adds: vec![b"b\n".to_vec(), b"c\n".to_vec()]
|
||||||
|
})
|
||||||
|
])
|
||||||
|
);
|
||||||
|
// Two sides changed different lines: no conflict
|
||||||
|
assert_eq!(
|
||||||
|
merge(&[b"a\nb\nc\n"], &[b"a2\nb\nc\n", b"a\nb\nc2\n"]),
|
||||||
|
MergeResult::Resolved(b"a2\nb\nc2\n".to_vec())
|
||||||
|
);
|
||||||
|
// Conflict with non-conflicting lines around
|
||||||
|
assert_eq!(
|
||||||
|
merge(&[b"a\nb\nc\n"], &[b"a\nb1\nc\n", b"a\nb2\nc\n"]),
|
||||||
|
MergeResult::Conflict(vec![
|
||||||
|
MergeHunk::Resolved(b"a\n".to_vec()),
|
||||||
|
MergeHunk::Conflict(ConflictHunk {
|
||||||
|
removes: vec![b"b\n".to_vec()],
|
||||||
|
adds: vec![b"b1\n".to_vec(), b"b2\n".to_vec()]
|
||||||
|
}),
|
||||||
|
MergeHunk::Resolved(b"c\n".to_vec())
|
||||||
|
])
|
||||||
|
);
|
||||||
|
// One side changes a line and adds a block after. The other side just adds the
|
||||||
|
// same block. This currently behaves as one would reasonably hope, but
|
||||||
|
// it's likely that it will change if when we fix
|
||||||
|
// https://github.com/martinvonz/jj/issues/761. Git and Mercurial both duplicate
|
||||||
|
// the block in the result.
|
||||||
|
assert_eq!(
|
||||||
|
merge(
|
||||||
|
&[b"\
|
||||||
|
a {
|
||||||
|
p
|
||||||
|
}
|
||||||
|
"],
|
||||||
|
&[
|
||||||
|
b"\
|
||||||
|
a {
|
||||||
|
q
|
||||||
|
}
|
||||||
|
|
||||||
|
b {
|
||||||
|
x
|
||||||
|
}
|
||||||
|
",
|
||||||
|
b"\
|
||||||
|
a {
|
||||||
|
p
|
||||||
|
}
|
||||||
|
|
||||||
|
b {
|
||||||
|
x
|
||||||
|
}
|
||||||
|
"
|
||||||
|
]
|
||||||
|
),
|
||||||
|
MergeResult::Resolved(
|
||||||
|
b"\
|
||||||
|
a {
|
||||||
|
q
|
||||||
|
}
|
||||||
|
|
||||||
|
b {
|
||||||
|
x
|
||||||
|
}
|
||||||
|
"
|
||||||
|
.to_vec()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue