tests: gui tests
This commit is contained in:
@@ -72,3 +72,79 @@ pub mod log_sanitizer {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use ratatui::{
|
||||
style::{Color, Style},
|
||||
text::{Line, Span},
|
||||
};
|
||||
|
||||
use super::log_sanitizer;
|
||||
|
||||
// This spells out "oxker", with each char having a foreground and background colour
|
||||
const INPUT: &str = "\x1b[31;47mo\x1b[32;40mx\x1b[33;41mk\x1b[34;42me\x1b[35;43mr\x1b[0m";
|
||||
|
||||
#[test]
|
||||
/// Return test raw, as in show escape codes
|
||||
fn color_match_raw() {
|
||||
let result = log_sanitizer::raw(INPUT);
|
||||
let expected = vec![Line {
|
||||
spans: [Span {
|
||||
content: std::borrow::Cow::Borrowed(
|
||||
"\x1b[31;47mo\x1b[32;40mx\x1b[33;41mk\x1b[34;42me\x1b[35;43mr\x1b[0m",
|
||||
),
|
||||
style: Style::default(),
|
||||
}]
|
||||
.to_vec(),
|
||||
alignment: None,
|
||||
}];
|
||||
assert_eq!(result, expected);
|
||||
}
|
||||
|
||||
#[test]
|
||||
// Use the escape codes to colorize the text
|
||||
fn color_match_colorize() {
|
||||
let result = log_sanitizer::colorize_logs(INPUT);
|
||||
let expected = vec![Line {
|
||||
spans: vec![
|
||||
Span {
|
||||
content: std::borrow::Cow::Borrowed("o"),
|
||||
style: Style::default().fg(Color::Red).bg(Color::White),
|
||||
},
|
||||
Span {
|
||||
content: std::borrow::Cow::Borrowed("x"),
|
||||
style: Style::default().fg(Color::Green).bg(Color::Black),
|
||||
},
|
||||
Span {
|
||||
content: std::borrow::Cow::Borrowed("k"),
|
||||
style: Style::default().fg(Color::Yellow).bg(Color::Red),
|
||||
},
|
||||
Span {
|
||||
content: std::borrow::Cow::Borrowed("e"),
|
||||
style: Style::default().fg(Color::Blue).bg(Color::Green),
|
||||
},
|
||||
Span {
|
||||
content: std::borrow::Cow::Borrowed("r"),
|
||||
style: Style::default().fg(Color::Magenta).bg(Color::Yellow),
|
||||
},
|
||||
],
|
||||
alignment: None,
|
||||
}];
|
||||
assert_eq!(result, expected);
|
||||
}
|
||||
|
||||
#[test]
|
||||
// Remove all escape ansi codes from given input
|
||||
fn color_match_remove_ansi() {
|
||||
let result = log_sanitizer::remove_ansi(INPUT);
|
||||
let expected = vec![Line {
|
||||
spans: vec![Span {
|
||||
content: std::borrow::Cow::Borrowed("oxker"),
|
||||
style: Style::default(),
|
||||
}],
|
||||
alignment: None,
|
||||
}];
|
||||
assert_eq!(result, expected);
|
||||
}
|
||||
}
|
||||
|
||||
+1763
-108
File diff suppressed because it is too large
Load Diff
+7
-28
@@ -217,22 +217,6 @@ impl Ui {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(not(debug_assertions))]
|
||||
fn get_wholelayout(f: &Frame) -> std::rc::Rc<[ratatui::layout::Rect]> {
|
||||
Layout::default()
|
||||
.direction(Direction::Vertical)
|
||||
.constraints([Constraint::Min(1), Constraint::Min(100)].as_ref())
|
||||
.split(f.size())
|
||||
}
|
||||
|
||||
#[cfg(debug_assertions)]
|
||||
fn get_wholelayout(f: &Frame) -> std::rc::Rc<[ratatui::layout::Rect]> {
|
||||
Layout::default()
|
||||
.direction(Direction::Vertical)
|
||||
.constraints([Constraint::Min(1), Constraint::Min(1), Constraint::Min(100)].as_ref())
|
||||
.split(f.size())
|
||||
}
|
||||
|
||||
/// Frequent data required by multiple framde drawing functions, can reduce mutex reads by placing it all in here
|
||||
#[derive(Debug)]
|
||||
pub struct FrameData {
|
||||
@@ -279,21 +263,16 @@ impl From<(MutexGuard<'_, AppData>, MutexGuard<'_, GuiState>)> for FrameData {
|
||||
fn draw_frame(f: &mut Frame, app_data: &Arc<Mutex<AppData>>, gui_state: &Arc<Mutex<GuiState>>) {
|
||||
let fd = FrameData::from((app_data.lock(), gui_state.lock()));
|
||||
|
||||
let whole_layout = get_wholelayout(f);
|
||||
#[cfg(debug_assertions)]
|
||||
draw_blocks::debug_bar(whole_layout[0], f, app_data.lock().get_debug_string());
|
||||
|
||||
#[cfg(debug_assertions)]
|
||||
let whole_layout_split = (1, 2);
|
||||
|
||||
#[cfg(not(debug_assertions))]
|
||||
let whole_layout_split = (0, 1);
|
||||
let whole_layout = Layout::default()
|
||||
.direction(Direction::Vertical)
|
||||
.constraints([Constraint::Min(1), Constraint::Min(100)].as_ref())
|
||||
.split(f.size());
|
||||
|
||||
// Split into 3, containers+controls, logs, then graphs
|
||||
let upper_main = Layout::default()
|
||||
.direction(Direction::Vertical)
|
||||
.constraints([Constraint::Max(fd.height), Constraint::Percentage(50)].as_ref())
|
||||
.split(whole_layout[whole_layout_split.1]);
|
||||
.split(whole_layout[1]);
|
||||
|
||||
let top_split = if fd.has_containers {
|
||||
vec![Constraint::Percentage(90), Constraint::Percentage(10)]
|
||||
@@ -318,11 +297,11 @@ fn draw_frame(f: &mut Frame, app_data: &Arc<Mutex<AppData>>, gui_state: &Arc<Mut
|
||||
.constraints(lower_split)
|
||||
.split(upper_main[1]);
|
||||
|
||||
draw_blocks::containers(app_data, top_panel[0], f, &fd, gui_state, &fd.columns);
|
||||
draw_blocks::containers(app_data, top_panel[0], f, &fd, gui_state);
|
||||
|
||||
draw_blocks::logs(app_data, lower_main[0], f, &fd, gui_state);
|
||||
|
||||
draw_blocks::heading_bar(whole_layout[whole_layout_split.0], f, &fd, gui_state);
|
||||
draw_blocks::heading_bar(whole_layout[0], f, &fd, gui_state);
|
||||
|
||||
if let Some(id) = fd.delete_confirm.as_ref() {
|
||||
app_data.lock().get_container_name_by_id(id).map_or_else(
|
||||
|
||||
Reference in New Issue
Block a user