blob: 6c140c9addb7490158525da542d625d11559afe1 [file] [log] [blame]
// Copyright (c) 2021 Maxim Zhiburt
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
#![cfg(feature = "std")]
use std::vec;
use papergrid::{
colors::NoColors,
config::spanned::SpannedConfig,
config::{AlignmentHorizontal, AlignmentVertical, Borders, Entity},
grid::iterable::Grid,
records::IterRecords,
};
use crate::util::{grid, ConstantDimension, DEFAULT_BORDERS};
use testing_table::test_table;
test_table!(render_0x0, grid(0, 0).build(), "");
test_table!(
render_1x1,
grid(1, 1).change_cell((0, 0), "one line").build(),
"+--------+"
"|one line|"
"+--------+"
);
test_table!(
render_1x1_empty,
grid(1, 1).change_cell((0, 0), "").build(),
"++"
"||"
"++"
);
test_table!(
render_1x1_empty_with_height_0,
{
let data = vec![vec![""]];
let data = IterRecords::new(data, 1, Some(1));
let dims = ConstantDimension(vec![0], vec![0]);
let mut cfg = SpannedConfig::default();
cfg.set_borders(DEFAULT_BORDERS);
let grid = Grid::new(&data, &dims, &cfg, NoColors);
grid.to_string()
},
"++"
"++"
);
test_table!(
render_1x1_empty_with_height_with_width,
{
let data = vec![vec![String::from("")]];
let data = IterRecords::new(&data, 1, Some(1));
let dims = ConstantDimension(vec![10], vec![0]);
let mut cfg = SpannedConfig::default();
cfg.set_borders(Borders {
top_left: Some('┌'),
top_right: Some('┐'),
bottom_left: Some('└'),
bottom_right: Some('┘'),
top: Some('─'),
bottom: Some('─'),
..Default::default()
});
let grid = Grid::new(data, &dims, &cfg, NoColors);
grid.to_string()
},
"┌──────────┐"
"└──────────┘"
);
test_table!(
render_2x2,
grid(2, 2).build(),
"+---+---+"
"|0-0|0-1|"
"+---+---+"
"|1-0|1-1|"
"+---+---+"
);
test_table!(
render_3x2,
grid(3, 2).build(),
"+---+---+"
"|0-0|0-1|"
"+---+---+"
"|1-0|1-1|"
"+---+---+"
"|2-0|2-1|"
"+---+---+"
);
test_table!(
render_1x2,
grid(1, 2).data([["hello", "world"]]).build(),
"+-----+-----+"
"|hello|world|"
"+-----+-----+"
);
test_table!(
render_multilane,
grid(2, 2)
.data([
["left\ncell", "right one"],
["the second column got the beginning here", "and here\nwe\nsee\na\nlong\nstring"],
])
.build(),
"+----------------------------------------+---------+"
"|left |right one|"
"|cell | |"
"+----------------------------------------+---------+"
"|the second column got the beginning here|and here |"
"| |we |"
"| |see |"
"| |a |"
"| |long |"
"| |string |"
"+----------------------------------------+---------+"
);
test_table!(
render_multilane_alignment,
grid(2, 2)
.config(|cfg|{
cfg.set_alignment_horizontal(Entity::Cell(0, 0), AlignmentHorizontal::Center);
cfg.set_alignment_horizontal(Entity::Cell(1, 1), AlignmentHorizontal::Right);
})
.data([
["left\ncell", "right one"],
["the second column got the beginning here", "and here\nwe\nsee\na\nlong\nstring"],
])
.build(),
"+----------------------------------------+---------+"
"| left |right one|"
"| cell | |"
"+----------------------------------------+---------+"
"|the second column got the beginning here| and here|"
"| | we |"
"| | see |"
"| | a |"
"| | long |"
"| | string |"
"+----------------------------------------+---------+"
);
test_table!(
render_multilane_vertical_alignment,
grid(2, 2)
.data([
["left\ncell", "right one"],
["the second column got the beginning here", "and here\nwe\nsee\na\nlong\nstring"],
])
.config(|cfg|{
cfg.set_alignment_horizontal(Entity::Cell(0, 0), AlignmentHorizontal::Center);
cfg.set_alignment_vertical(Entity::Cell(1, 0), AlignmentVertical::Center);
cfg.set_alignment_horizontal(Entity::Cell(1, 1), AlignmentHorizontal::Right);
})
.build(),
"+----------------------------------------+---------+"
"| left |right one|"
"| cell | |"
"+----------------------------------------+---------+"
"| | and here|"
"| | we |"
"|the second column got the beginning here| see |"
"| | a |"
"| | long |"
"| | string |"
"+----------------------------------------+---------+"
);
test_table!(
render_empty_cell,
grid(2, 2).change_cell((0, 1), "").build(),
"+---+---+"
"|0-0| |"
"+---+---+"
"|1-0|1-1|"
"+---+---+"
);
test_table!(
hieroglyph_multiline_handling,
grid(1, 2).data([["哈哈", "哈\n哈"]]).build(),
"+----+--+"
"|哈哈|哈|"
"| |哈|"
"+----+--+"
);
test_table!(
hieroglyph_handling_2,
grid(2, 1).data([["জী._ডি._ব্লক_সল্টলেক_দূর্গা_পুজো_২০১৮.jpg"], ["Hello"]]).build(),
"+------------------------------------+"
"|জী._ডি._ব্লক_সল্টলেক_দূর্গা_পুজো_২০১৮.jpg|"
"+------------------------------------+"
"|Hello |"
"+------------------------------------+"
);
test_table!(
doesnt_render_return_carige_0,
grid(2, 2).change_cell((0, 1), "123\r\r\r567").build(),
"+---+------+"
"|0-0|123\r\r\r567|"
"+---+------+"
"|1-0|1-1 |"
"+---+------+"
);
test_table!(
doesnt_render_return_carige_1,
grid(2, 2).change_cell((1, 1), "12345678").change_cell((0, 1), "123\r\r\r567").build(),
"+---+--------+"
"|0-0|123\r\r\r567 |"
"+---+--------+"
"|1-0|12345678|"
"+---+--------+"
);
// #[test]
// #[ignore = "I am not sure what is the right behaiviour here"]
// fn hieroglyph_handling() {
// let grid = util::grid_from([["哈哈", "哈"]]);
// assert_eq!(
// grid,
// "+----+--+\n\
// |哈哈 |哈 |\n\
// +----+--+",
// )
// }