cargo hollywood
Diffstat (limited to 'src/test/ui/progress.rs')
| -rw-r--r-- | src/test/ui/progress.rs | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/test/ui/progress.rs b/src/test/ui/progress.rs new file mode 100644 index 0000000..d30c755 --- /dev/null +++ b/src/test/ui/progress.rs @@ -0,0 +1,39 @@ +use ratatui::{ + prelude::*, + widgets::{Block, BorderType::Rounded, Borders, Paragraph}, + Frame, +}; + +use crate::{ + ctext, + test::{Test, TestState}, +}; + +pub fn progress<B: Backend>(f: &mut Frame<B>, state: &TestState, chunk: Rect) { + let size = + |n| (n as f32 / state.test_count as f32 * f32::from(chunk.width)).round() as usize * 3; + const LINE: &str = "──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────"; + let mut passing = 0; + let mut ignored = 0; + let mut failing = 0; + let mut running = 0; + for test in &state.tests { + match test { + Test::Succeeded(_) => passing += 1, + Test::Ignored { .. } => ignored += 1, + Test::Failed(_) => failing += 1, + Test::InProgress { .. } => running += 1, + } + } + let progress = Paragraph::new(ctext!( + "{:cyan}{:green}{:red}{:yellow}", + &LINE[..size(ignored)], + &LINE[..size(passing)], + &LINE[..size(failing)], + &LINE[..size(running)], + )); + f.render_widget( + progress.block(Block::default().borders(Borders::ALL).border_type(Rounded)), + chunk, + ); +} |