summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Oram <dev@mitmaro.ca>2020-12-21 11:11:21 -0330
committerTim Oram <dev@mitmaro.ca>2020-12-22 11:32:10 -0330
commit6c21a46d8d5c4846459ea2891f6e56bdf20616d6 (patch)
tree3dfc82deec3e2212a9257e88e130fcab5e4f3a9e
parentf1f7b583923eac77f633067f86b8f03f8962118a (diff)
Improve test render of padding
Previously the render of padding in tests would strip any default padding from the end of lines, but fully print non-default padding. This change keeps the stripping of default padding, but outputs a token version of other types of padding. A test in process:help was also updated to use the new type of padding.
-rw-r--r--src/process/help.rs2
-rw-r--r--src/view/testutil.rs16
-rw-r--r--src/view/view_data.rs22
3 files changed, 34 insertions, 6 deletions
diff --git a/src/process/help.rs b/src/process/help.rs
index 45d0375..e0ec39f 100644
--- a/src/process/help.rs
+++ b/src/process/help.rs
@@ -165,7 +165,7 @@ mod tests {
view_data,
"{TITLE}",
"{LEADING}",
- "{Normal,Underline} Key Action{Normal,Underline} ",
+ "{Normal,Underline} Key Action{Normal,Underline}{Pad ,11}",
"{BODY}",
"{IndicatorColor} a{Normal,Dimmed}|{Normal}Description A",
"{IndicatorColor} b{Normal,Dimmed}|{Normal}Description B",
diff --git a/src/view/testutil.rs b/src/view/testutil.rs
index 3368e13..b38f4bb 100644
--- a/src/view/testutil.rs
+++ b/src/view/testutil.rs
@@ -51,14 +51,14 @@ fn render_view_line(view_line: &ViewLine) -> String {
let segments = view_line.get_segments();
for (index, segment) in segments.iter().enumerate() {
let content = segment.get_content();
- // skip any trailing padding whitespace segments to make diff building/matching easier
- // this could probably be done in a better way, but I cannot think of it just now - Tim
- if index + 1 == segments.len()
+ let is_padding = index + 1 == segments.len() && content.replace(view_line.padding_character(), "").is_empty();
+ // skip standard padding
+ if is_padding
+ && view_line.padding_character() == " "
&& segment.get_color() == DisplayColor::Normal
&& !segment.is_dimmed()
&& !segment.is_reversed()
&& !segment.is_underlined()
- && content.trim().is_empty()
{
continue;
}
@@ -72,7 +72,13 @@ fn render_view_line(view_line: &ViewLine) -> String {
)
.as_str(),
);
- line.push_str(segment.get_content());
+ // only render
+ if is_padding {
+ line.push_str(format!("{{Pad {},{}}}", view_line.padding_character(), content.len()).as_str());
+ }
+ else {
+ line.push_str(segment.get_content());
+ }
}
line
}
diff --git a/src/view/view_data.rs b/src/view/view_data.rs
index edb2747..68bd201 100644
--- a/src/view/view_data.rs
+++ b/src/view/view_data.rs
@@ -488,6 +488,7 @@ impl ViewData {
ViewLine::new_with_pinned_segments(segments, line.get_number_of_pinned_segment())
.set_selected(line.get_selected())
+ .set_padding_character(line.padding_character())
})
.collect::<Vec<ViewLine>>()
}
@@ -990,6 +991,27 @@ mod tests {
}
#[test]
+ fn rebuild_retains_selected() {
+ let mut view_data = ViewData::new();
+ view_data.set_view_size(100, 10);
+ view_data.push_line(ViewLine::new_empty_line().set_padding_character("*"));
+ view_data.rebuild();
+
+ // padding characters are stripped by the test render, so test it directly
+ assert_eq!(view_data.lines_cache.unwrap()[0].padding_character(), "*");
+ }
+
+ #[test]
+ fn rebuild_retains_padding_character() {
+ let mut view_data = ViewData::new();
+ view_data.set_view_size(100, 10);
+ view_data.push_line(ViewLine::from("a").set_selected(true));
+ view_data.rebuild();
+
+ assert_rendered_output!(view_data, "{BODY}", "{Normal(selected)}a");
+ }
+
+ #[test]
fn scroll_down_one_line() {
let mut view_data = create_mocked_scroll_vertical_view_data();
view_data.scroll_down();