use tui::{ backend::TestBackend, layout::Rect, style::{Color, Style}, symbols, text::Span, widgets::{Axis, Block, Borders, Chart, Dataset, GraphType::Line}, Terminal, }; fn create_labels<'a>(labels: &'a [&'a str]) -> Vec> { labels.iter().map(|l| Span::from(*l)).collect() } #[test] fn widgets_chart_can_have_axis_with_zero_length_bounds() { let backend = TestBackend::new(100, 100); let mut terminal = Terminal::new(backend).unwrap(); terminal .draw(|f| { let datasets = vec![Dataset::default() .marker(symbols::Marker::Braille) .style(Style::default().fg(Color::Magenta)) .data(&[(0.0, 0.0)])]; let chart = Chart::new(datasets) .block(Block::default().title("Plot").borders(Borders::ALL)) .x_axis( Axis::default() .bounds([0.0, 0.0]) .labels(create_labels(&["0.0", "1.0"])), ) .y_axis( Axis::default() .bounds([0.0, 0.0]) .labels(create_labels(&["0.0", "1.0"])), ); f.render_widget( chart, Rect { x: 0, y: 0, width: 100, height: 100, }, ); }) .unwrap(); } #[test] fn widgets_chart_handles_overflows() { let backend = TestBackend::new(80, 30); let mut terminal = Terminal::new(backend).unwrap(); terminal .draw(|f| { let datasets = vec![Dataset::default() .marker(symbols::Marker::Braille) .style(Style::default().fg(Color::Magenta)) .data(&[ (1_588_298_471.0, 1.0), (1_588_298_473.0, 0.0), (1_588_298_496.0, 1.0), ])]; let chart = Chart::new(datasets) .block(Block::default().title("Plot").borders(Borders::ALL)) .x_axis( Axis::default() .bounds([1_588_298_471.0, 1_588_992_600.0]) .labels(create_labels(&["1588298471.0", "1588992600.0"])), ) .y_axis( Axis::default() .bounds([0.0, 1.0]) .labels(create_labels(&["0.0", "1.0"])), ); f.render_widget( chart, Rect { x: 0, y: 0, width: 80, height: 30, }, ); }) .unwrap(); } #[test] fn widgets_chart_can_have_empty_datasets() { let backend = TestBackend::new(100, 100); let mut terminal = Terminal::new(backend).unwrap(); terminal .draw(|f| { let datasets = vec![Dataset::default().data(&[]).graph_type(Line)]; let chart = Chart::new(datasets) .block( Block::default() .title("Empty Dataset With Line") .borders(Borders::ALL), ) .x_axis( Axis::default() .bounds([0.0, 0.0]) .labels(create_labels(&["0.0", "1.0"])), ) .y_axis( Axis::default() .bounds([0.0, 1.0]) .labels(create_labels(&["0.0", "1.0"])), ); f.render_widget( chart, Rect { x: 0, y: 0, width: 100, height: 100, }, ); }) .unwrap(); }