wip: terminal tests
This commit is contained in:
+78
-2
@@ -851,8 +851,7 @@ pub fn delete_confirm(f: &mut Frame, gui_state: &Arc<Mutex<GuiState>>, name: &Co
|
|||||||
.update_region_map(Region::Delete(DeleteButton::Yes), yes_area);
|
.update_region_map(Region::Delete(DeleteButton::Yes), yes_area);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Draw an error popup over whole screen
|
fn gen_error<'f>(f: &mut Frame, error: AppError, seconds: Option<u8>) -> (Paragraph<'f>, Rect) {
|
||||||
pub fn error(f: &mut Frame, error: AppError, seconds: Option<u8>) {
|
|
||||||
let block = Block::default()
|
let block = Block::default()
|
||||||
.title(" Error ")
|
.title(" Error ")
|
||||||
.border_type(BorderType::Rounded)
|
.border_type(BorderType::Rounded)
|
||||||
@@ -889,6 +888,13 @@ pub fn error(f: &mut Frame, error: AppError, seconds: Option<u8>) {
|
|||||||
.alignment(Alignment::Center);
|
.alignment(Alignment::Center);
|
||||||
|
|
||||||
let area = popup(lines, max_line_width, f.size(), BoxLocation::MiddleCentre);
|
let area = popup(lines, max_line_width, f.size(), BoxLocation::MiddleCentre);
|
||||||
|
(paragraph, area)
|
||||||
|
// area
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Draw an error popup over whole screen
|
||||||
|
pub fn error(f: &mut Frame, error: AppError, seconds: Option<u8>) {
|
||||||
|
let (paragraph, area) = gen_error(f, error, seconds);
|
||||||
f.render_widget(Clear, area);
|
f.render_widget(Clear, area);
|
||||||
f.render_widget(paragraph, area);
|
f.render_widget(paragraph, area);
|
||||||
}
|
}
|
||||||
@@ -969,3 +975,73 @@ pub fn debug_bar(area: Rect, f: &mut Frame, debug_string: &str) {
|
|||||||
// .borders(Borders::NONE);
|
// .borders(Borders::NONE);
|
||||||
// f.render_widget(block, whole_layout[0]);
|
// f.render_widget(block, whole_layout[0]);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
#[allow(clippy::unwrap_used, clippy::many_single_char_names, unused)]
|
||||||
|
mod tests {
|
||||||
|
|
||||||
|
use std::collections::VecDeque;
|
||||||
|
|
||||||
|
use ratatui::{backend::TestBackend, buffer::Buffer, Terminal};
|
||||||
|
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
// Test that the error popup is centered, red background, white border, white text, and displays the correct text
|
||||||
|
fn test_draw_blocks_error() {
|
||||||
|
let backend = TestBackend::new(46, 9);
|
||||||
|
let mut terminal = Terminal::new(backend).unwrap();
|
||||||
|
|
||||||
|
terminal
|
||||||
|
.draw(|f| {
|
||||||
|
let block = super::gen_error(f, AppError::DockerConnect, Some(4));
|
||||||
|
f.render_widget(block.0, block.1);
|
||||||
|
})
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let mut expected = vec![
|
||||||
|
" ".to_owned(),
|
||||||
|
" ╭───────────────── Error ──────────────────╮ ".to_owned(),
|
||||||
|
" │ │ ".to_owned(),
|
||||||
|
" │ Unable to access docker daemon │ ".to_owned(),
|
||||||
|
" │ │ ".to_owned(),
|
||||||
|
format!(" │ oxker::v{VERSION} closing in 04 seconds │ "),
|
||||||
|
" │ │ ".to_owned(),
|
||||||
|
" ╰──────────────────────────────────────────╯ ".to_owned(),
|
||||||
|
" ".to_owned(),
|
||||||
|
];
|
||||||
|
|
||||||
|
for (row_index, row) in expected.iter().enumerate() {
|
||||||
|
for (char_index, char) in row.chars().enumerate() {
|
||||||
|
let index = row_index * 46 + char_index;
|
||||||
|
let result_char = &terminal.backend().buffer().content[index];
|
||||||
|
assert_eq!(char.to_string(), result_char.symbol());
|
||||||
|
if (1..=7).contains(&row_index) && (1..=44).contains(&char_index) {
|
||||||
|
assert_eq!(result_char.bg, Color::Red);
|
||||||
|
}
|
||||||
|
if result_char.symbol().chars().next().unwrap().is_alphanumeric() {
|
||||||
|
assert_eq!(result_char.fg, Color::White);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// let result = &terminal.backend().buffer().content.iter().map(|i|i.symbol().to_owned()).collect::<Vec<_>>();
|
||||||
|
// println!("{expected:?}");
|
||||||
|
// println!("{:?}", terminal.backend().buffer().content);
|
||||||
|
// // let mut expected = Buffer::with_lines(vec![
|
||||||
|
// // "┌Title─┐ ",
|
||||||
|
// // "│ │ ",
|
||||||
|
// // "│ │ ",
|
||||||
|
// // "│ │ ",
|
||||||
|
// // "│ │ ",
|
||||||
|
// // "│ │ ",
|
||||||
|
// // "│ │ ",
|
||||||
|
// // "└──────┘ ",
|
||||||
|
// // " ",
|
||||||
|
// // " ",
|
||||||
|
// // ]);
|
||||||
|
// // for x in 1..=5 {
|
||||||
|
// // expected.get_mut(x, 0).set_fg(Color::LightBlue);
|
||||||
|
// // }
|
||||||
|
// terminal.backend().assert_buffer(&expected);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user