rat-widget 3.0.2

ratatui widgets extended edition
Documentation
use rat_widget::layout::{FormLabel, FormWidget, LayoutForm};
use ratatui_core::layout::{Rect, Size};
use ratatui_widgets::block::{Block, Padding};

#[test]
fn test_break() {
    let mut layout = LayoutForm::<i32>::new();

    layout.widget(1, FormLabel::Width(5), FormWidget::Width(15));
    layout.widget(2, FormLabel::Width(5), FormWidget::Width(15));
    layout.widget(3, FormLabel::Width(5), FormWidget::Width(15));
    layout.widget(4, FormLabel::Width(5), FormWidget::Width(15));
    layout.widget(5, FormLabel::Width(5), FormWidget::Width(15));
    layout.widget(6, FormLabel::Width(5), FormWidget::Width(15));

    let g = layout.build_paged(Size::new(10, 5));

    assert_eq!(g.page_of(6), Some(1));
}

#[test]
fn test_break2() {
    let mut layout = LayoutForm::<i32>::new().padding(Padding::new(0, 0, 1, 1));

    layout.widget(1, FormLabel::Width(5), FormWidget::Width(15));
    layout.widget(2, FormLabel::Width(5), FormWidget::Width(15));
    layout.widget(3, FormLabel::Width(5), FormWidget::Width(15));
    layout.widget(4, FormLabel::Width(5), FormWidget::Width(15));
    layout.widget(5, FormLabel::Width(5), FormWidget::Width(15));
    layout.widget(6, FormLabel::Width(5), FormWidget::Width(15));
    layout.widget(7, FormLabel::Width(5), FormWidget::Width(15));

    let g = layout.build_paged(Size::new(10, 5));

    assert_eq!(g.page_of(4), Some(1));
    assert_eq!(g.page_of(7), Some(2));
}

#[test]
fn test_break3() {
    let mut layout = LayoutForm::<i32>::new().padding(Padding::new(0, 0, 1, 1));

    layout.widget(1, FormLabel::Width(5), FormWidget::Width(15));
    layout.widget(2, FormLabel::Size(5, 3), FormWidget::Width(15));
    layout.widget(3, FormLabel::Width(5), FormWidget::Width(15));
    layout.widget(4, FormLabel::Width(5), FormWidget::Width(15));
    layout.widget(5, FormLabel::Width(5), FormWidget::Width(15));
    layout.widget(6, FormLabel::Width(5), FormWidget::Width(15));
    layout.widget(7, FormLabel::Width(5), FormWidget::Width(15));

    let g = layout.build_paged(Size::new(10, 5));

    assert_eq!(g.page_of(1), Some(0));
    assert_eq!(g.page_of(2), Some(1));
    assert_eq!(g.page_of(3), Some(2));
    assert_eq!(g.page_of(4), Some(2));
    assert_eq!(g.page_of(5), Some(2));
    assert_eq!(g.page_of(6), Some(3));
    assert_eq!(g.page_of(7), Some(3));
}

#[test]
fn test_break4() {
    let mut layout = LayoutForm::<i32>::new().padding(Padding::new(0, 0, 1, 1));

    let tag = layout.start(Some(Block::bordered()));
    layout.widget(1, FormLabel::Width(5), FormWidget::Width(15));
    layout.widget(2, FormLabel::Width(5), FormWidget::Width(15));
    layout.widget(3, FormLabel::Width(5), FormWidget::Width(15));
    layout.widget(4, FormLabel::Width(5), FormWidget::Width(15));
    layout.widget(5, FormLabel::Width(5), FormWidget::Width(15));
    layout.widget(6, FormLabel::Width(5), FormWidget::Width(15));
    layout.widget(7, FormLabel::Width(5), FormWidget::Width(15));
    layout.end(tag);

    let g = layout.build_paged(Size::new(10, 5));
    assert_eq!(g.page_of(7), Some(6));
    dbg!(&g);
    assert_eq!(g.block_area(6), Rect::new(0, 31, 10, 3));
}

#[test]
fn test_break5() {
    let mut layout = LayoutForm::<i32>::new() //
        .padding(Padding::new(0, 0, 1, 1));

    let tag1 = layout.start(Some(Block::bordered()));
    let tag2 = layout.start(Some(Block::bordered()));
    layout.widget(1, FormLabel::Width(5), FormWidget::Width(15));
    layout.widget(2, FormLabel::Width(5), FormWidget::Width(15));
    layout.end(tag2);
    layout.widget(3, FormLabel::Width(5), FormWidget::Width(15));
    layout.widget(4, FormLabel::Width(5), FormWidget::Width(15));
    layout.widget(5, FormLabel::Width(5), FormWidget::Width(15));
    layout.widget(6, FormLabel::Width(5), FormWidget::Width(15));
    layout.widget(7, FormLabel::Width(5), FormWidget::Width(15));
    layout.end(tag1);

    let g = layout.build_paged(Size::new(10, 14));
    assert_eq!(g.page_of(7), Some(0));
    assert_eq!(g.block_area(1), Rect::new(0, 1, 10, 11));
}

#[test]
fn test_overflow() {
    let mut layout = LayoutForm::<i32>::new()
        .line_spacing(1)
        .padding(Padding::new(0, 0, 1, 1));

    let tag = layout.start(Some(Block::bordered()));
    layout.widget(0, FormLabel::None, FormWidget::Size(1, u16::MAX));
    layout.widget(0, FormLabel::None, FormWidget::Size(1, 1024));
    layout.widget(0, FormLabel::None, FormWidget::Size(1, 1024));
    layout.widget(0, FormLabel::None, FormWidget::Size(1, 1024));
    layout.end(tag);

    let l = layout.build_endless(100);
    dbg!(l);
}

#[test]
fn test_overflow2() {
    let mut layout = LayoutForm::<i32>::new()
        .line_spacing(1)
        .padding(Padding::new(0, 0, 1, 1));

    let tag = layout.start(Some(Block::bordered()));
    layout.widget(0, FormLabel::None, FormWidget::Size(1, u16::MAX));
    layout.widget(0, FormLabel::None, FormWidget::Size(1, 1024));
    layout.widget(0, FormLabel::None, FormWidget::Size(1, 1024));
    layout.widget(0, FormLabel::None, FormWidget::Size(1, 1024));
    layout.end(tag);

    let l = layout.build_paged(Size::new(100, u16::MAX));
    dbg!(l);
}