use super::*;
#[test]
fn bar_spans_places_marker_without_changing_width() {
let fill = Style::default();
let total =
|spans: &[Span<'_>]| -> usize { spans.iter().map(|s| s.content.chars().count()).sum() };
let marker_col = |spans: &[Span<'_>]| -> Option<usize> {
let mut col = 0;
for s in spans {
if s.content == "│" {
return Some(col);
}
col += s.content.chars().count();
}
None
};
let plain = bar_spans(4, 10, fill, None);
assert_eq!(total(&plain), 10);
assert_eq!(marker_col(&plain), None);
let under = bar_spans(4, 10, fill, Some(7));
assert_eq!(
total(&under),
10,
"width unchanged with a marker over the empty run"
);
assert_eq!(marker_col(&under), Some(7));
let ahead = bar_spans(8, 10, fill, Some(3));
assert_eq!(
total(&ahead),
10,
"width unchanged with a marker over the filled run"
);
assert_eq!(marker_col(&ahead), Some(3));
let boundary = bar_spans(4, 10, fill, Some(4));
assert_eq!(total(&boundary), 10);
assert_eq!(marker_col(&boundary), Some(4));
let oob = bar_spans(4, 10, fill, Some(10));
assert_eq!(marker_col(&oob), None);
assert_eq!(total(&oob), 10);
}