use cli_grid::{Cell, Grid, HAlign, Row, VAlign}; #[test] fn test_grid_1x1() { let grid = Grid::builder(vec![Row::new(vec![Cell::new("1".into(), 1)])]) .default_h_align(HAlign::Left) .default_v_align(VAlign::Top) .default_blank_char('.') .column_width(3) .build(); let result = grid.to_string(); #[rustfmt::skip] let expected = format!( "{}\n", "1.." ); assert_eq!(result, expected); } #[test] fn test_grid_2x2_with_padding_0() { let grid = Grid::builder(vec![ Row::new(vec![Cell::new("1".into(), 1), Cell::new("1".into(), 1)]), Row::new(vec![Cell::new("1".into(), 1), Cell::new("1".into(), 1)]), ]) .default_h_align(HAlign::Left) .default_v_align(VAlign::Top) .default_blank_char('.') .column_width(3) .padding_size(0) .build(); let result = grid.to_string(); #[rustfmt::skip] let expected = format!( "{}\n{}\n", "1..1..", "1..1.." ); assert_eq!(result, expected); } #[test] fn test_grid_2x2_with_padding_1() { let grid = Grid::builder(vec![ Row::new(vec![Cell::new("1".into(), 1), Cell::new("1".into(), 1)]), Row::new(vec![Cell::new("1".into(), 1), Cell::new("1".into(), 1)]), ]) .default_h_align(HAlign::Left) .default_v_align(VAlign::Top) .default_blank_char('.') .column_width(3) .build(); let result = grid.to_string(); #[rustfmt::skip] let expected = format!( "{}\n{}\n", "1.. 1..", "1.. 1.." ); assert_eq!(result, expected); } #[test] fn test_grid_3x3_center_top_with_empty_cell() { let grid = Grid::builder(vec![ Row::new(vec![ Cell::new("1".into(), 1), Cell::new("1".into(), 1), Cell::new("1".into(), 1), ]), Row::new(vec![ Cell::new("1".into(), 1), Cell::new_empty(1), Cell::new("1".into(), 1), ]), Row::new(vec![ Cell::new("1".into(), 1), Cell::new("1".into(), 1), Cell::new("1".into(), 1), ]), ]) .default_h_align(HAlign::Center) .default_v_align(VAlign::Top) .default_blank_char('.') .column_width(6) .build(); let result = grid.to_string(); #[rustfmt::skip] let expected = format!( "{}\n{}\n{}\n", "..1... ..1... ..1...", "..1... ...... ..1...", "..1... ..1... ..1...", ); assert_eq!(result, expected); } #[test] fn test_grid_3x3_multi_line_center_top() { let grid = Grid::builder(vec![ Row::new(vec![ Cell::new("1".into(), 1), Cell::new("1".into(), 1), Cell::new("1".into(), 1), ]), Row::new(vec![ Cell::new("1".into(), 1), Cell::new("1\n111\n1".into(), 1), Cell::new("1".into(), 1), ]), Row::new(vec![ Cell::new("1".into(), 1), Cell::new("1".into(), 1), Cell::new("1".into(), 1), ]), ]) .default_h_align(HAlign::Center) .default_v_align(VAlign::Top) .default_blank_char('.') .column_width(6) .build(); let result = grid.to_string(); #[rustfmt::skip] let expected = format!( "{}\n{}\n{}\n{}\n{}\n", "..1... ..1... ..1...", "..1... ..1... ..1...", "...... .111.. ......", "...... ..1... ......", "..1... ..1... ..1...", ); assert_eq!(result, expected); } #[test] fn test_grid_3x3_multi_line_fill_top() { let grid = Grid::builder(vec![ Row::new(vec![ Cell::new("1".into(), 1), Cell::new("1".into(), 1), Cell::new("1".into(), 1), ]), Row::new(vec![ Cell::new("1".into(), 1), Cell::builder("1\nabc\n1".into(), 1) .h_align(HAlign::Fill) .build(), Cell::new("1".into(), 1), ]), Row::new(vec![ Cell::new("1".into(), 1), Cell::new("1".into(), 1), Cell::new("1".into(), 1), ]), ]) .default_h_align(HAlign::Center) .default_v_align(VAlign::Top) .default_blank_char('.') .column_width(6) .build(); let result = grid.to_string(); #[rustfmt::skip] let expected = format!( "{}\n{}\n{}\n{}\n{}\n", "..1... ..1... ..1...", "..1... 111111 ..1...", "...... abcabc ......", "...... 111111 ......", "..1... ..1... ..1...", ); assert_eq!(result, expected); } #[test] fn test_grid_3x3_multi_line_center_middle() { let grid = Grid::builder(vec![ Row::new(vec![ Cell::new("1".into(), 1), Cell::new("1".into(), 1), Cell::new("1".into(), 1), ]), Row::new(vec![ Cell::new("1".into(), 1), Cell::new("1\n111\n1".into(), 1), Cell::new("1".into(), 1), ]), Row::new(vec![ Cell::new("1".into(), 1), Cell::new("1".into(), 1), Cell::new("1".into(), 1), ]), ]) .default_h_align(HAlign::Center) .default_v_align(VAlign::Middle) .default_blank_char('.') .column_width(6) .build(); let result = grid.to_string(); #[rustfmt::skip] let expected = format!( "{}\n{}\n{}\n{}\n{}\n", "..1... ..1... ..1...", "...... ..1... ......", "..1... .111.. ..1...", "...... ..1... ......", "..1... ..1... ..1...", ); assert_eq!(result, expected); } #[test] fn test_grid_3x3_multi_line_center_bottom() { let grid = Grid::builder(vec![ Row::new(vec![ Cell::new("1".into(), 1), Cell::new("1".into(), 1), Cell::new("1".into(), 1), ]), Row::new(vec![ Cell::new("1".into(), 1), Cell::new("1\n111\n1".into(), 1), Cell::new("1".into(), 1), ]), Row::new(vec![ Cell::new("1".into(), 1), Cell::new("1".into(), 1), Cell::new("1".into(), 1), ]), ]) .default_h_align(HAlign::Center) .default_v_align(VAlign::Bottom) .default_blank_char('.') .column_width(6) .build(); let result = grid.to_string(); #[rustfmt::skip] let expected = format!( "{}\n{}\n{}\n{}\n{}\n", "..1... ..1... ..1...", "...... ..1... ......", "...... .111.. ......", "..1... ..1... ..1...", "..1... ..1... ..1...", ); assert_eq!(result, expected); } #[test] fn test_grid_3x3_center_top_with_different_col_spans1() { let grid = Grid::builder(vec![ Row::new(vec![ Cell::new("1".into(), 1), Cell::new("6".into(), 6), Cell::new("1".into(), 1), ]), Row::new(vec![ Cell::new("2".into(), 2), Cell::new("4".into(), 4), Cell::new("2".into(), 2), ]), Row::new(vec![ Cell::new("3".into(), 3), Cell::new("2".into(), 2), Cell::new("3".into(), 3), ]), ]) .default_h_align(HAlign::Center) .default_v_align(VAlign::Top) .default_blank_char('.') .column_width(3) .build(); let result = grid.to_string(); #[rustfmt::skip] let expected = format!( "{}\n{}\n{}\n", ".1. ...........6........... .1.", "...2... .......4....... ...2...", ".....3..... ...2... .....3.....", ); assert_eq!(result, expected); } #[test] fn test_grid_3x3_center_top_with_different_col_spans2() { let grid = Grid::builder(vec![ Row::new(vec![Cell::new("3".into(), 3)]), Row::new(vec![Cell::new("1".into(), 1), Cell::new("2".into(), 2)]), Row::new(vec![ Cell::new("1".into(), 1), Cell::new("1".into(), 1), Cell::new("1".into(), 1), ]), ]) .default_h_align(HAlign::Center) .default_v_align(VAlign::Top) .default_blank_char('.') .column_width(3) .build(); let result = grid.to_string(); #[rustfmt::skip] let expected = format!( "{}\n{}\n{}\n", ".....3.....", ".1. ...2...", ".1. .1. .1.", ); assert_eq!(result, expected); } #[test] fn test_nested_grids_3x3_multi_line_center_middle() { let inner_grid = Grid::builder(vec![ Row::new(vec![Cell::new("1".into(), 1), Cell::new("1".into(), 1)]), Row::new(vec![Cell::new("1".into(), 1), Cell::new("1".into(), 1)]), Row::new(vec![Cell::new("1".into(), 1), Cell::new("1".into(), 1)]), ]) .default_h_align(HAlign::Center) .default_blank_char('-') .column_width(3) .build(); let inner_grid_str = inner_grid.to_string(); let grid = Grid::builder(vec![ Row::new(vec![ Cell::new("1".into(), 1), Cell::new("1".into(), 1), Cell::new("1".into(), 1), ]), Row::new(vec![ Cell::new("1".into(), 1), Cell::new(inner_grid_str.to_string().into(), 1), Cell::new("1".into(), 1), ]), Row::new(vec![ Cell::new("1".into(), 1), Cell::new("1".into(), 1), Cell::new("1".into(), 1), ]), ]) .default_h_align(HAlign::Center) .default_v_align(VAlign::Middle) .default_blank_char('.') .column_width(13) .build(); let result = grid.to_string(); #[rustfmt::skip] let expected = format!( "{}\n{}\n{}\n{}\n{}\n", "......1...... ......1...... ......1......", "............. ...-1- -1-... .............", "......1...... ...-1- -1-... ......1......", "............. ...-1- -1-... .............", "......1...... ......1...... ......1......", ); assert_eq!(result, expected); }