termint 0.8.1

Library for colored printing and Terminal User Interfaces
Documentation
#[cfg(test)]
mod tests {
    use termal::formatc;
    use termint::{
        borders,
        buffer::Buffer,
        enums::{BorderType, Color, Modifier},
        geometry::Rect,
        style::Style,
        widgets::{Block, Element, LayoutNode, Widget},
    };

    #[test]
    fn border_title_render() {
        let rect = Rect::new(1, 1, 10, 5);
        let mut buffer = Buffer::empty(rect);

        let bg: Element<()> = Block::empty().title("Test").into();
        let mut node = LayoutNode::new(&bg);
        node.layout(&bg, Rect::new(3, 2, 7, 4));
        bg.render(&mut buffer, &node);

        let expected = formatc!(
            "          \n  ┌Test─┐ \n  │     │ \n  │     │ \n  └─────┘ {'_}"
        );
        assert_eq!(buffer.to_string(), expected);
    }

    #[test]
    fn styled_border_render() {
        let rect = Rect::new(1, 1, 10, 5);
        let mut buffer = Buffer::empty(rect);

        let style = Style::new()
            .fg(Color::Cyan)
            .bg(Color::Black)
            .modifier(Modifier::BOLD);
        let bg: Element<()> = Block::empty().border_style(style).into();
        let mut node = LayoutNode::new(&bg);
        node.layout(&bg, Rect::new(3, 2, 7, 4));
        bg.render(&mut buffer, &node);

        let expected = formatc!(
            "          \n  {style}┌─────┐\x1b[0m \n  {style}│\x1b[0m     \
            {style}│\x1b[0m \n  {style}│\x1b[0m     {style}│\x1b[0m \n  \
            {style}└─────┘\x1b[0m {'_}"
        );
        assert_eq!(buffer.to_string(), expected);
    }

    #[test]
    fn border_type_render() {
        let rect = Rect::new(1, 1, 10, 5);
        let mut buffer = Buffer::empty(rect);

        let bg: Element<()> =
            Block::empty().border_type(BorderType::Double).into();
        let mut node = LayoutNode::new(&bg);
        node.layout(&bg, Rect::new(3, 2, 7, 4));
        bg.render(&mut buffer, &node);

        let expected = formatc!(
            "          \n  ╔═════╗ \n  ║     ║ \n  ║     ║ \n  ╚═════╝ {'_}"
        );
        assert_eq!(buffer.to_string(), expected);
    }

    #[test]
    fn border_side_render() {
        let rect = Rect::new(1, 1, 10, 5);
        let mut buffer = Buffer::empty(rect);

        let bg: Element<()> =
            Block::empty().borders(borders!(TOP, LEFT)).into();
        let mut node = LayoutNode::new(&bg);
        node.layout(&bg, Rect::new(3, 2, 7, 4));
        bg.render(&mut buffer, &node);

        let expected = formatc!(
            "          \n  ┌────── \n\n\n  │       {'_}"
        );
        assert_eq!(buffer.to_string(), expected);
    }

    #[test]
    fn content_render() {
        let rect = Rect::new(1, 1, 10, 5);
        let mut buffer = Buffer::empty(rect);

        let bg: Element<()> = Block::vertical().bg(Color::Red).into();
        let mut node = LayoutNode::new(&bg);
        node.layout(&bg, Rect::new(3, 2, 7, 4));
        bg.render(&mut buffer, &node);

        let expected = formatc!(
            "          \n  ┌─────┐ \n  │{}     {}│ \n  │{}     {}│ \n  \
            └─────┘ {'_}",
            Color::Red.to_bg(),
            Color::Default.to_bg(),
            Color::Red.to_bg(),
            Color::Default.to_bg(),
        );
        assert_eq!(buffer.to_string(), expected);
    }
}