From 4f728d363f0be75f844f39b2fa2705e7b4373953 Mon Sep 17 00:00:00 2001 From: Florian Dehau Date: Tue, 14 Apr 2020 18:02:48 +0200 Subject: [PATCH] fix(widgets/list): stop highlighting blank placeholders --- examples/demo/ui.rs | 2 +- src/widgets/list.rs | 13 ++++--------- tests/list.rs | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 10 deletions(-) create mode 100644 tests/list.rs diff --git a/examples/demo/ui.rs b/examples/demo/ui.rs index c84c0fe..662de22 100644 --- a/examples/demo/ui.rs +++ b/examples/demo/ui.rs @@ -114,7 +114,7 @@ where let tasks = List::new(tasks) .block(Block::default().borders(Borders::ALL).title("List")) .highlight_style(Style::default().fg(Color::Yellow).modifier(Modifier::BOLD)) - .highlight_symbol(">"); + .highlight_symbol("> "); f.render_stateful_widget(tasks, chunks[0], &mut app.tasks.state); // Draw logs diff --git a/src/widgets/list.rs b/src/widgets/list.rs index f83e431..ca0fa92 100644 --- a/src/widgets/list.rs +++ b/src/widgets/list.rs @@ -195,16 +195,11 @@ where list_area.width as usize, highlight_style, ); - (x + 1, Some(highlight_style)) + (x, Some(highlight_style)) } else { - let (x, _) = buf.set_stringn( - x, - y, - &blank_symbol, - list_area.width as usize, - highlight_style, - ); - (x + 1, None) + let (x, _) = + buf.set_stringn(x, y, &blank_symbol, list_area.width as usize, self.style); + (x, None) } } else { (x, None) diff --git a/tests/list.rs b/tests/list.rs new file mode 100644 index 0000000..4ef02e5 --- /dev/null +++ b/tests/list.rs @@ -0,0 +1,34 @@ +use tui::{ + backend::TestBackend, + buffer::Buffer, + style::{Color, Style}, + widgets::{List, ListState, Text}, + Terminal, +}; + +#[test] +fn it_should_highlight_the_selected_item() { + let backend = TestBackend::new(10, 3); + let mut terminal = Terminal::new(backend).unwrap(); + let mut state = ListState::default(); + state.select(Some(1)); + terminal + .draw(|mut f| { + let size = f.size(); + let items = vec![ + Text::raw("Item 1"), + Text::raw("Item 2"), + Text::raw("Item 3"), + ]; + let list = List::new(items.into_iter()) + .highlight_style(Style::default().bg(Color::Yellow)) + .highlight_symbol(">> "); + f.render_stateful_widget(list, size, &mut state); + }) + .unwrap(); + let mut expected = Buffer::with_lines(vec![" Item 1 ", ">> Item 2 ", " Item 3 "]); + for x in 0..9 { + expected.get_mut(x, 1).set_bg(Color::Yellow); + } + assert_eq!(*terminal.backend().buffer(), expected); +}