grux 0.2.0

A library for drawing grid-based user interfaces using ASCII characters
Documentation
use super::art::*;
use super::*;

#[test]
fn display_grid_default_impl_to_string() {
    struct MyGrid;

    impl DisplayGrid for MyGrid {
        fn write_to(&self, stream: &mut impl std::io::Write) -> std::io::Result<()> {
            write!(stream, "Hello ")?;
            write!(stream, "World!")?;
            Ok(())
        }
    }

    let string = MyGrid.to_string().unwrap();
    assert_eq!(string, "Hello World!");
}

#[test]
fn grid_writer_fixed_array() {
    let mut grid = [[0, 1, 2], [3, 4, 5], [6, 7, 8]];

    grid.set((1, 1), 9);

    assert_eq!(grid, [[0, 1, 2], [3, 9, 5], [6, 7, 8]]);
}

#[test]
fn display_grid_fixed_array() {
    let grid = [[0, 1, 2], [3, 4, 5], [6, 7, 8]];

    let string = grid.to_string().unwrap();
    assert_eq!(string, "012\n345\n678\n");
}

#[test]
fn grid_writer_fixed_vec() {
    let mut grid = vec![vec![0, 1, 2], vec![3, 4, 5], vec![6, 7, 8]];

    grid.set((1, 1), 9);

    assert_eq!(grid, vec![vec![0, 1, 2], vec![3, 9, 5], vec![6, 7, 8]]);
}

#[test]
fn grid_writer_grown_vec() {
    let mut grid = vec![];

    grid.set((3, 3), 9);

    assert_eq!(grid, vec![vec![], vec![], vec![], vec![0, 0, 0, 9]]);
}

#[test]
fn display_grid_fixed_vec() {
    let grid = vec![vec![0, 1, 2], vec![3, 4, 5], vec![6, 7, 8]];

    let string = grid.to_string().unwrap();
    assert_eq!(string, "012\n345\n678\n");
}

#[test]
fn display_grid_grown_vec() {
    let grid = vec![vec![], vec![], vec![], vec![0, 0, 0, 9]];

    let string = grid.to_string().unwrap();
    assert_eq!(string, "\n\n\n0009\n");
}

#[test]
fn grid_writer_fixed_string() {
    let mut grid = String::from("012\n345\n678\n");

    grid.set((1, 1), '9');

    assert_eq!(grid, "012\n395\n678");
}

#[test]
fn grid_writer_grown_string() {
    let mut grid = String::new();

    grid.set((3, 3), '9');

    assert_eq!(grid, "\n\n\n   9");
}

#[test]
fn display_grid_string() {
    let grid = String::from("012\n345\n678\n");

    let string = DisplayGrid::to_string(&grid).unwrap();
    assert_eq!(string, "012\n345\n678\n");
}

#[test]
fn display_grid_string_print() {
    let grid = String::from("012\n345\n678\n");
    let mut buffer = Vec::new();

    grid.write_to(&mut buffer).unwrap();
    assert_eq!(buffer, b"012\n345\n678\n");
}

#[test]
fn sprite_line_horizontal() {
    let mut grid = [[' '; 3]; 3];

    let line = Line::horizontal(3, '');
    line.draw_to((0, 0), &mut grid);

    #[rustfmt::skip]
    assert_eq!(grid, [
        ['', '', ''],
        [' ', ' ', ' '],
        [' ', ' ', ' '],
    ]);

    assert_eq!(line.width(), 3);
    assert_eq!(line.height(), 1);
}

#[test]
fn sprite_line_vertical() {
    let mut grid = [[' '; 3]; 3];

    let line = Line::vertical(3, '');
    line.draw_to((0, 0), &mut grid);

    #[rustfmt::skip]
    assert_eq!(grid, [
        ['', ' ', ' '],
        ['', ' ', ' '],
        ['', ' ', ' '],
    ]);

    assert_eq!(line.width(), 1);
    assert_eq!(line.height(), 3);
}

#[test]
fn sprite_fill_rect() {
    let mut grid = [[' '; 3]; 3];

    let rect = FillRect::new(3, 3, '');
    rect.draw_to((0, 0), &mut grid);

    #[rustfmt::skip]
    assert_eq!(grid, [
        ['', '', ''],
        ['', '', ''],
        ['', '', ''],
    ]);

    assert_eq!(rect.width(), 3);
    assert_eq!(rect.height(), 3);
}

#[test]
fn sprite_border_rect() {
    let mut grid = [[' '; 3]; 3];

    let rect = BorderRect::new(3, 3, ['', '', '', '', '', '', '', '']);
    rect.draw_to((0, 0), &mut grid);

    #[rustfmt::skip]
    assert_eq!(grid, [
        ['', '', ''],
        ['', ' ', ''],
        ['', '', ''],
    ]);

    assert_eq!(rect.width(), 3);
    assert_eq!(rect.height(), 3);
}

#[test]
#[should_panic]
fn sprite_border_width_too_small() {
    let _ = BorderRect::new(1, 3, ['', '', '', '', '', '', '', '']);
}

#[test]
#[should_panic]
fn sprite_border_height_too_small() {
    let _ = BorderRect::new(3, 1, ['', '', '', '', '', '', '', '']);
}