Add a test for aligning lines from a hunk

a_star_module
Wilfred Hughes 2022-01-03 11:12:21 +07:00
parent 5ba4b6eadb
commit c17c57a9bc
1 changed files with 149 additions and 1 deletions

@ -646,8 +646,9 @@ mod tests {
use super::*;
use crate::{
positions::SingleLineSpan,
syntax::{MatchKind, TokenKind},
syntax::{AtomKind, MatchKind, TokenKind},
};
use pretty_assertions::assert_eq;
#[test]
fn test_sorted_novel_positions_simple() {
@ -693,4 +694,151 @@ mod tests {
assert_eq!(res, vec![(Side::LHS, novel_mp)]);
}
/// Simulate a simple diff:
///
/// // Old
/// A
/// B
///
/// // New
/// A
/// x
/// B
#[test]
fn test_aligned_lines_from_hunk() {
let hunk = Hunk {
lines: vec![(None, Some(1.into()))],
};
let lhs_mps = vec![
MatchedPos {
kind: MatchKind::Unchanged {
highlight: TokenKind::Atom(AtomKind::Normal),
self_pos: (
vec![SingleLineSpan {
line: 0.into(),
start_col: 0,
end_col: 1,
}],
vec![],
),
opposite_pos: (
vec![SingleLineSpan {
line: 0.into(),
start_col: 0,
end_col: 1,
}],
vec![],
),
},
pos: SingleLineSpan {
line: 0.into(),
start_col: 0,
end_col: 1,
},
},
MatchedPos {
kind: MatchKind::Unchanged {
highlight: TokenKind::Atom(AtomKind::Normal),
self_pos: (
vec![SingleLineSpan {
line: 1.into(),
start_col: 0,
end_col: 1,
}],
vec![],
),
opposite_pos: (
vec![SingleLineSpan {
line: 2.into(),
start_col: 0,
end_col: 1,
}],
vec![],
),
},
pos: SingleLineSpan {
line: 1.into(),
start_col: 0,
end_col: 1,
},
},
];
let rhs_mps = vec![
MatchedPos {
kind: MatchKind::Unchanged {
highlight: TokenKind::Atom(AtomKind::Normal),
self_pos: (
vec![SingleLineSpan {
line: 0.into(),
start_col: 0,
end_col: 1,
}],
vec![],
),
opposite_pos: (
vec![SingleLineSpan {
line: 0.into(),
start_col: 0,
end_col: 1,
}],
vec![],
),
},
pos: SingleLineSpan {
line: 0.into(),
start_col: 0,
end_col: 1,
},
},
MatchedPos {
kind: MatchKind::Novel {
highlight: TokenKind::Atom(AtomKind::Normal),
},
pos: SingleLineSpan {
line: 1.into(),
start_col: 0,
end_col: 1,
},
},
MatchedPos {
kind: MatchKind::Unchanged {
highlight: TokenKind::Atom(AtomKind::Normal),
self_pos: (
vec![SingleLineSpan {
line: 2.into(),
start_col: 0,
end_col: 1,
}],
vec![],
),
opposite_pos: (
vec![SingleLineSpan {
line: 1.into(),
start_col: 0,
end_col: 1,
}],
vec![],
),
},
pos: SingleLineSpan {
line: 2.into(),
start_col: 0,
end_col: 1,
},
},
];
let res = aligned_lines_from_hunk(&hunk, &lhs_mps, &rhs_mps, 1.into(), 2.into());
assert_eq!(
res,
vec![
(Some(0.into()), Some(0.into())),
(None, Some(1.into())),
(Some(1.into()), Some(2.into()))
]
);
}
}