use crate::layout::Rect;
use crate::render::Buffer;
use crate::widget::layout::sidebar::{CollapseMode, Sidebar};
use crate::widget::traits::RenderContext;
#[test]
fn test_render_sidebar_too_narrow() {
let sidebar = Sidebar::new();
let mut buffer = Buffer::new(2, 10); let area = Rect::new(0, 0, 2, 10);
let mut ctx = RenderContext::new(&mut buffer, area);
sidebar.render(&mut ctx);
}
#[test]
fn test_render_sidebar_too_short() {
let sidebar = Sidebar::new();
let mut buffer = Buffer::new(10, 1); let area = Rect::new(0, 0, 10, 1);
let mut ctx = RenderContext::new(&mut buffer, area);
sidebar.render(&mut ctx);
}
#[test]
fn test_render_sidebar_zero_width() {
let sidebar = Sidebar::new();
let mut buffer = Buffer::new(0, 10);
let area = Rect::new(0, 0, 0, 10);
let mut ctx = RenderContext::new(&mut buffer, area);
sidebar.render(&mut ctx);
}
#[test]
fn test_render_sidebar_zero_height() {
let sidebar = Sidebar::new();
let mut buffer = Buffer::new(10, 0);
let area = Rect::new(0, 0, 10, 0);
let mut ctx = RenderContext::new(&mut buffer, area);
sidebar.render(&mut ctx);
}
#[test]
fn test_render_sidebar_expanded_mode() {
let sidebar = Sidebar::new()
.collapse_mode(CollapseMode::Expanded)
.expanded_width(20);
let mut buffer = Buffer::new(30, 10);
let area = Rect::new(0, 0, 30, 10);
let mut ctx = RenderContext::new(&mut buffer, area);
sidebar.render(&mut ctx);
let cell = buffer.get(0, 0);
assert!(cell.is_some());
}
#[test]
fn test_render_sidebar_collapsed_mode() {
let sidebar = Sidebar::new()
.collapse_mode(CollapseMode::Collapsed)
.collapsed_width(5);
let mut buffer = Buffer::new(30, 10);
let area = Rect::new(0, 0, 30, 10);
let mut ctx = RenderContext::new(&mut buffer, area);
sidebar.render(&mut ctx);
let cell = buffer.get(0, 0);
assert!(cell.is_some());
}
#[test]
fn test_render_sidebar_auto_mode_collapsed() {
let sidebar = Sidebar::new()
.collapse_mode(CollapseMode::Auto)
.collapse_threshold(15)
.expanded_width(20)
.collapsed_width(5);
let mut buffer = Buffer::new(10, 10); let area = Rect::new(0, 0, 10, 10);
let mut ctx = RenderContext::new(&mut buffer, area);
sidebar.render(&mut ctx);
let cell = buffer.get(0, 0);
assert!(cell.is_some());
}
#[test]
fn test_render_sidebar_auto_mode_expanded() {
let sidebar = Sidebar::new()
.collapse_mode(CollapseMode::Auto)
.collapse_threshold(15)
.expanded_width(20)
.collapsed_width(5);
let mut buffer = Buffer::new(30, 10); let area = Rect::new(0, 0, 30, 10);
let mut ctx = RenderContext::new(&mut buffer, area);
sidebar.render(&mut ctx);
let cell = buffer.get(0, 0);
assert!(cell.is_some());
}
#[test]
fn test_render_sidebar_with_header() {
let sidebar = Sidebar::new().header("Test Header");
let mut buffer = Buffer::new(20, 10);
let area = Rect::new(0, 0, 20, 10);
let mut ctx = RenderContext::new(&mut buffer, area);
sidebar.render(&mut ctx);
let cell = buffer.get(0, 1);
assert!(cell.is_some());
}
#[test]
fn test_render_sidebar_with_footer() {
let sidebar = Sidebar::new().footer("Test Footer");
let mut buffer = Buffer::new(20, 10);
let area = Rect::new(0, 0, 20, 10);
let mut ctx = RenderContext::new(&mut buffer, area);
sidebar.render(&mut ctx);
let cell = buffer.get(0, 8);
assert!(cell.is_some());
}
#[test]
fn test_render_sidebar_with_header_and_footer() {
let sidebar = Sidebar::new().header("Header").footer("Footer");
let mut buffer = Buffer::new(20, 10);
let area = Rect::new(0, 0, 20, 10);
let mut ctx = RenderContext::new(&mut buffer, area);
sidebar.render(&mut ctx);
let header_sep = buffer.get(0, 1);
let footer_sep = buffer.get(0, 8);
assert!(header_sep.is_some());
assert!(footer_sep.is_some());
}
#[test]
fn test_render_sidebar_header_truncation() {
let long_header = "This is a very long header that should be truncated";
let sidebar = Sidebar::new().header(long_header).expanded_width(15);
let mut buffer = Buffer::new(15, 10);
let area = Rect::new(0, 0, 15, 10);
let mut ctx = RenderContext::new(&mut buffer, area);
sidebar.render(&mut ctx);
let cell = buffer.get(0, 0);
assert!(cell.is_some());
}
#[test]
fn test_render_sidebar_background() {
let sidebar = Sidebar::new().bg(crate::style::Color::rgb(0, 0, 255));
let mut buffer = Buffer::new(20, 10);
let area = Rect::new(0, 0, 20, 10);
let mut ctx = RenderContext::new(&mut buffer, area);
sidebar.render(&mut ctx);
let cell = buffer.get(0, 0).unwrap();
assert_eq!(cell.bg, Some(crate::style::Color::rgb(0, 0, 255)));
}
#[test]
fn test_render_sidebar_border() {
let sidebar = Sidebar::new()
.border_color(crate::style::Color::rgb(255, 0, 0))
.expanded_width(15);
let mut buffer = Buffer::new(20, 10);
let area = Rect::new(0, 0, 20, 10);
let mut ctx = RenderContext::new(&mut buffer, area);
sidebar.render(&mut ctx);
let border_cell = buffer.get(14, 0);
assert!(border_cell.is_some());
}
#[test]
fn test_render_sidebar_with_colors() {
let sidebar = Sidebar::new()
.fg(crate::style::Color::rgb(255, 255, 255))
.bg(crate::style::Color::rgb(0, 0, 0))
.border_color(crate::style::Color::rgb(128, 128, 128))
.section_color(crate::style::Color::rgb(0, 255, 255));
let mut buffer = Buffer::new(20, 10);
let area = Rect::new(0, 0, 20, 10);
let mut ctx = RenderContext::new(&mut buffer, area);
sidebar.render(&mut ctx);
let cell = buffer.get(0, 0);
assert!(cell.is_some());
}
#[test]
fn test_render_sidebar_content_width_clamping() {
let sidebar = Sidebar::new()
.expanded_width(30)
.collapse_mode(CollapseMode::Expanded);
let mut buffer = Buffer::new(20, 10); let area = Rect::new(0, 0, 20, 10);
let mut ctx = RenderContext::new(&mut buffer, area);
sidebar.render(&mut ctx);
let border_cell = buffer.get(19, 0); assert!(border_cell.is_some());
}
#[test]
fn test_render_empty_sidebar() {
let sidebar = Sidebar::new();
let mut buffer = Buffer::new(20, 10);
let area = Rect::new(0, 0, 20, 10);
let mut ctx = RenderContext::new(&mut buffer, area);
sidebar.render(&mut ctx);
}