blob: 1abfaa34a518a896487c41bf3dbb19603dfaa8f4 [file] [log] [blame]
#![cfg(feature = "std")]
use papergrid::config::{spanned::Formatting, AlignmentHorizontal, AlignmentVertical, Entity};
use crate::util::grid;
use testing_table::static_table;
#[test]
fn formatting_test() {
let tests = [
(
AlignmentHorizontal::Left,
AlignmentVertical::Top,
Formatting::new(false, false, true),
static_table!(
"+-------------+----------+"
"|A long string| |"
"| | |"
"| | |"
"| |A |"
"| | string|"
"| |with |"
"| | new |"
"| |line |"
"| | |"
"| | |"
"| | |"
"+-------------+----------+"
"|1-0 |1-1 |"
"+-------------+----------+"
"|A one more |... |"
"| string | |"
"|with | |"
"| new | |"
"|line | |"
"+-------------+----------+"
),
),
(
AlignmentHorizontal::Left,
AlignmentVertical::Top,
Formatting::new(true, false, true),
static_table!(
"+-------------+----------+"
"|A long string| |"
"| | |"
"| | |"
"| |A |"
"| |string |"
"| |with |"
"| |new |"
"| |line |"
"| | |"
"| | |"
"| | |"
"+-------------+----------+"
"|1-0 |1-1 |"
"+-------------+----------+"
"|A one more |... |"
"|string | |"
"|with | |"
"|new | |"
"|line | |"
"+-------------+----------+"
),
),
(
AlignmentHorizontal::Left,
AlignmentVertical::Top,
Formatting::new(true, true, true),
static_table!(
"+-------------+----------+"
"|A long string|A |"
"| |string |"
"| |with |"
"| |new |"
"| |line |"
"| | |"
"| | |"
"| | |"
"| | |"
"| | |"
"| | |"
"+-------------+----------+"
"|1-0 |1-1 |"
"+-------------+----------+"
"|A one more |... |"
"|string | |"
"|with | |"
"|new | |"
"|line | |"
"+-------------+----------+"
),
),
//
(
AlignmentHorizontal::Center,
AlignmentVertical::Top,
Formatting::new(false, false, true),
static_table!(
"+-------------+----------+"
"|A long string| |"
"| | |"
"| | |"
"| | A |"
"| | string|"
"| | with |"
"| | new |"
"| | line |"
"| | |"
"| | |"
"| | |"
"+-------------+----------+"
"| 1-0 | 1-1 |"
"+-------------+----------+"
"| A one more | ... |"
"| string | |"
"| with | |"
"| new | |"
"| line | |"
"+-------------+----------+"
),
),
(
AlignmentHorizontal::Center,
AlignmentVertical::Top,
Formatting::new(true, false, true),
static_table!(
"+-------------+----------+"
"|A long string| |"
"| | |"
"| | |"
"| | A |"
"| | string |"
"| | with |"
"| | new |"
"| | line |"
"| | |"
"| | |"
"| | |"
"+-------------+----------+"
"| 1-0 | 1-1 |"
"+-------------+----------+"
"| A one more | ... |"
"| string | |"
"| with | |"
"| new | |"
"| line | |"
"+-------------+----------+"
),
),
(
AlignmentHorizontal::Center,
AlignmentVertical::Top,
Formatting::new(true, true, true),
static_table!(
"+-------------+----------+"
"|A long string| A |"
"| | string |"
"| | with |"
"| | new |"
"| | line |"
"| | |"
"| | |"
"| | |"
"| | |"
"| | |"
"| | |"
"+-------------+----------+"
"| 1-0 | 1-1 |"
"+-------------+----------+"
"| A one more | ... |"
"| string | |"
"| with | |"
"| new | |"
"| line | |"
"+-------------+----------+"
),
),
//
(
AlignmentHorizontal::Right,
AlignmentVertical::Top,
Formatting::new(false, false, true),
static_table!(
"+-------------+----------+"
"|A long string| |"
"| | |"
"| | |"
"| | A|"
"| | string|"
"| | with|"
"| | new|"
"| | line|"
"| | |"
"| | |"
"| | |"
"+-------------+----------+"
"| 1-0| 1-1|"
"+-------------+----------+"
"| A one more| ...|"
"| string| |"
"| with| |"
"| new| |"
"| line| |"
"+-------------+----------+"
),
),
(
AlignmentHorizontal::Right,
AlignmentVertical::Top,
Formatting::new(true, false, true),
static_table!(
"+-------------+----------+"
"|A long string| |"
"| | |"
"| | |"
"| | A|"
"| | string|"
"| | with|"
"| | new|"
"| | line|"
"| | |"
"| | |"
"| | |"
"+-------------+----------+"
"| 1-0| 1-1|"
"+-------------+----------+"
"| A one more| ...|"
"| string| |"
"| with| |"
"| new| |"
"| line| |"
"+-------------+----------+"
),
),
(
AlignmentHorizontal::Right,
AlignmentVertical::Top,
Formatting::new(true, true, true),
static_table!(
"+-------------+----------+"
"|A long string| A|"
"| | string|"
"| | with|"
"| | new|"
"| | line|"
"| | |"
"| | |"
"| | |"
"| | |"
"| | |"
"| | |"
"+-------------+----------+"
"| 1-0| 1-1|"
"+-------------+----------+"
"| A one more| ...|"
"| string| |"
"| with| |"
"| new| |"
"| line| |"
"+-------------+----------+"
),
),
// asd
(
AlignmentHorizontal::Left,
AlignmentVertical::Center,
Formatting::new(false, false, true),
static_table!(
"+-------------+----------+"
"| | |"
"| | |"
"| | |"
"| |A |"
"| | string|"
"|A long string|with |"
"| | new |"
"| |line |"
"| | |"
"| | |"
"| | |"
"+-------------+----------+"
"|1-0 |1-1 |"
"+-------------+----------+"
"|A one more | |"
"| string | |"
"|with |... |"
"| new | |"
"|line | |"
"+-------------+----------+"
),
),
(
AlignmentHorizontal::Left,
AlignmentVertical::Center,
Formatting::new(true, false, true),
static_table!(
"+-------------+----------+"
"| | |"
"| | |"
"| | |"
"| |A |"
"| |string |"
"|A long string|with |"
"| |new |"
"| |line |"
"| | |"
"| | |"
"| | |"
"+-------------+----------+"
"|1-0 |1-1 |"
"+-------------+----------+"
"|A one more | |"
"|string | |"
"|with |... |"
"|new | |"
"|line | |"
"+-------------+----------+"
),
),
(
AlignmentHorizontal::Left,
AlignmentVertical::Center,
Formatting::new(true, true, true),
static_table!(
"+-------------+----------+"
"| | |"
"| | |"
"| | |"
"| |A |"
"| |string |"
"|A long string|with |"
"| |new |"
"| |line |"
"| | |"
"| | |"
"| | |"
"+-------------+----------+"
"|1-0 |1-1 |"
"+-------------+----------+"
"|A one more | |"
"|string | |"
"|with |... |"
"|new | |"
"|line | |"
"+-------------+----------+"
),
),
//
(
AlignmentHorizontal::Center,
AlignmentVertical::Center,
Formatting::new(false, false, true),
static_table!(
"+-------------+----------+"
"| | |"
"| | |"
"| | |"
"| | A |"
"| | string|"
"|A long string| with |"
"| | new |"
"| | line |"
"| | |"
"| | |"
"| | |"
"+-------------+----------+"
"| 1-0 | 1-1 |"
"+-------------+----------+"
"| A one more | |"
"| string | |"
"| with | ... |"
"| new | |"
"| line | |"
"+-------------+----------+"
),
),
(
AlignmentHorizontal::Center,
AlignmentVertical::Center,
Formatting::new(true, false, true),
static_table!(
"+-------------+----------+"
"| | |"
"| | |"
"| | |"
"| | A |"
"| | string |"
"|A long string| with |"
"| | new |"
"| | line |"
"| | |"
"| | |"
"| | |"
"+-------------+----------+"
"| 1-0 | 1-1 |"
"+-------------+----------+"
"| A one more | |"
"| string | |"
"| with | ... |"
"| new | |"
"| line | |"
"+-------------+----------+"
),
),
(
AlignmentHorizontal::Center,
AlignmentVertical::Center,
Formatting::new(true, true, true),
static_table!(
"+-------------+----------+"
"| | |"
"| | |"
"| | |"
"| | A |"
"| | string |"
"|A long string| with |"
"| | new |"
"| | line |"
"| | |"
"| | |"
"| | |"
"+-------------+----------+"
"| 1-0 | 1-1 |"
"+-------------+----------+"
"| A one more | |"
"| string | |"
"| with | ... |"
"| new | |"
"| line | |"
"+-------------+----------+"
),
),
//
(
AlignmentHorizontal::Right,
AlignmentVertical::Center,
Formatting::new(false, false, true),
static_table!(
"+-------------+----------+"
"| | |"
"| | |"
"| | |"
"| | A|"
"| | string|"
"|A long string| with|"
"| | new|"
"| | line|"
"| | |"
"| | |"
"| | |"
"+-------------+----------+"
"| 1-0| 1-1|"
"+-------------+----------+"
"| A one more| |"
"| string| |"
"| with| ...|"
"| new| |"
"| line| |"
"+-------------+----------+"
),
),
(
AlignmentHorizontal::Right,
AlignmentVertical::Center,
Formatting::new(true, false, true),
static_table!(
"+-------------+----------+"
"| | |"
"| | |"
"| | |"
"| | A|"
"| | string|"
"|A long string| with|"
"| | new|"
"| | line|"
"| | |"
"| | |"
"| | |"
"+-------------+----------+"
"| 1-0| 1-1|"
"+-------------+----------+"
"| A one more| |"
"| string| |"
"| with| ...|"
"| new| |"
"| line| |"
"+-------------+----------+"
),
),
(
AlignmentHorizontal::Right,
AlignmentVertical::Center,
Formatting::new(true, true, true),
static_table!(
"+-------------+----------+"
"| | |"
"| | |"
"| | |"
"| | A|"
"| | string|"
"|A long string| with|"
"| | new|"
"| | line|"
"| | |"
"| | |"
"| | |"
"+-------------+----------+"
"| 1-0| 1-1|"
"+-------------+----------+"
"| A one more| |"
"| string| |"
"| with| ...|"
"| new| |"
"| line| |"
"+-------------+----------+"
),
),
//
// asd
(
AlignmentHorizontal::Left,
AlignmentVertical::Bottom,
Formatting::new(false, false, true),
static_table!(
"+-------------+----------+"
"| | |"
"| | |"
"| | |"
"| |A |"
"| | string|"
"| |with |"
"| | new |"
"| |line |"
"| | |"
"| | |"
"|A long string| |"
"+-------------+----------+"
"|1-0 |1-1 |"
"+-------------+----------+"
"|A one more | |"
"| string | |"
"|with | |"
"| new | |"
"|line |... |"
"+-------------+----------+"
),
),
(
AlignmentHorizontal::Left,
AlignmentVertical::Bottom,
Formatting::new(true, false, true),
static_table!(
"+-------------+----------+"
"| | |"
"| | |"
"| | |"
"| |A |"
"| |string |"
"| |with |"
"| |new |"
"| |line |"
"| | |"
"| | |"
"|A long string| |"
"+-------------+----------+"
"|1-0 |1-1 |"
"+-------------+----------+"
"|A one more | |"
"|string | |"
"|with | |"
"|new | |"
"|line |... |"
"+-------------+----------+"
),
),
(
AlignmentHorizontal::Left,
AlignmentVertical::Bottom,
Formatting::new(true, true, true),
static_table!(
"+-------------+----------+"
"| | |"
"| | |"
"| | |"
"| | |"
"| | |"
"| | |"
"| |A |"
"| |string |"
"| |with |"
"| |new |"
"|A long string|line |"
"+-------------+----------+"
"|1-0 |1-1 |"
"+-------------+----------+"
"|A one more | |"
"|string | |"
"|with | |"
"|new | |"
"|line |... |"
"+-------------+----------+"
),
),
//
(
AlignmentHorizontal::Center,
AlignmentVertical::Bottom,
Formatting::new(false, false, true),
static_table!(
"+-------------+----------+"
"| | |"
"| | |"
"| | |"
"| | A |"
"| | string|"
"| | with |"
"| | new |"
"| | line |"
"| | |"
"| | |"
"|A long string| |"
"+-------------+----------+"
"| 1-0 | 1-1 |"
"+-------------+----------+"
"| A one more | |"
"| string | |"
"| with | |"
"| new | |"
"| line | ... |"
"+-------------+----------+"
),
),
(
AlignmentHorizontal::Center,
AlignmentVertical::Bottom,
Formatting::new(true, false, true),
static_table!(
"+-------------+----------+"
"| | |"
"| | |"
"| | |"
"| | A |"
"| | string |"
"| | with |"
"| | new |"
"| | line |"
"| | |"
"| | |"
"|A long string| |"
"+-------------+----------+"
"| 1-0 | 1-1 |"
"+-------------+----------+"
"| A one more | |"
"| string | |"
"| with | |"
"| new | |"
"| line | ... |"
"+-------------+----------+"
),
),
(
AlignmentHorizontal::Center,
AlignmentVertical::Bottom,
Formatting::new(true, true, true),
static_table!(
"+-------------+----------+"
"| | |"
"| | |"
"| | |"
"| | |"
"| | |"
"| | |"
"| | A |"
"| | string |"
"| | with |"
"| | new |"
"|A long string| line |"
"+-------------+----------+"
"| 1-0 | 1-1 |"
"+-------------+----------+"
"| A one more | |"
"| string | |"
"| with | |"
"| new | |"
"| line | ... |"
"+-------------+----------+"
),
),
//
(
AlignmentHorizontal::Right,
AlignmentVertical::Bottom,
Formatting::new(false, false, true),
static_table!(
"+-------------+----------+"
"| | |"
"| | |"
"| | |"
"| | A|"
"| | string|"
"| | with|"
"| | new|"
"| | line|"
"| | |"
"| | |"
"|A long string| |"
"+-------------+----------+"
"| 1-0| 1-1|"
"+-------------+----------+"
"| A one more| |"
"| string| |"
"| with| |"
"| new| |"
"| line| ...|"
"+-------------+----------+"
),
),
(
AlignmentHorizontal::Right,
AlignmentVertical::Bottom,
Formatting::new(true, false, true),
static_table!(
"+-------------+----------+"
"| | |"
"| | |"
"| | |"
"| | A|"
"| | string|"
"| | with|"
"| | new|"
"| | line|"
"| | |"
"| | |"
"|A long string| |"
"+-------------+----------+"
"| 1-0| 1-1|"
"+-------------+----------+"
"| A one more| |"
"| string| |"
"| with| |"
"| new| |"
"| line| ...|"
"+-------------+----------+"
),
),
(
AlignmentHorizontal::Right,
AlignmentVertical::Bottom,
Formatting::new(true, true, true),
static_table!(
"+-------------+----------+"
"| | |"
"| | |"
"| | |"
"| | |"
"| | |"
"| | |"
"| | A|"
"| | string|"
"| | with|"
"| | new|"
"|A long string| line|"
"+-------------+----------+"
"| 1-0| 1-1|"
"+-------------+----------+"
"| A one more| |"
"| string| |"
"| with| |"
"| new| |"
"| line| ...|"
"+-------------+----------+"
),
),
];
let grid = grid(3, 2)
.change_cell((0, 0), "A long string")
.change_cell((0, 1), "\n\n\nA\n string\nwith\n new\nline\n\n\n")
.change_cell((2, 0), "A one more\n string\nwith\n new\nline")
.change_cell((2, 1), "...");
for (i, test) in tests.iter().enumerate() {
let table = grid
.clone()
.config(|cfg| {
cfg.set_alignment_horizontal(Entity::Global, test.0);
cfg.set_alignment_vertical(Entity::Global, test.1);
cfg.set_formatting(Entity::Global, test.2);
})
.clone()
.build();
let expected = test.3;
assert_eq!(table, expected, "test case #{i:?} failed");
}
}
#[test]
fn formatting_empty_test() {
for (rows, cols) in [(0, 0), (0, 4), (4, 0)] {
let formatting = Formatting::new(true, true, true);
assert_eq!(
grid(rows, cols)
.config(|cfg| cfg.set_formatting(Entity::Global, formatting))
.build(),
""
);
}
}
#[test]
fn formatting_1x1_test() {
let json = r#"
{
"id": "0001",
"batters": {
"batter": [
{ "id": "1002", "type": "Chocolate" },
]
},
"topping": [
{ "id": "5003", "type": "Chocolate" },
{ "id": "5004", "type": "Maple" }
]
}"#;
let grid = grid(1, 1).data([[json]]);
assert_eq!(
grid.clone()
.config(
|cfg| cfg.set_alignment_horizontal(Entity::Cell(0, 0), AlignmentHorizontal::Left)
)
.build(),
static_table!(
r#"+--------------------------------------------------+"#
r#"| |"#
r#"|{ |"#
r#"| "id": "0001", |"#
r#"| "batters": { |"#
r#"| "batter": [ |"#
r#"| { "id": "1002", "type": "Chocolate" },|"#
r#"| ] |"#
r#"| }, |"#
r#"| "topping": [ |"#
r#"| { "id": "5003", "type": "Chocolate" }, |"#
r#"| { "id": "5004", "type": "Maple" } |"#
r#"| ] |"#
r#"|} |"#
r#"+--------------------------------------------------+"#
),
);
assert_eq!(
grid.clone()
.config(|cfg| cfg.set_formatting(Entity::Global, Formatting::new(false, false, true)))
.build(),
static_table!(
r#"+--------------------------------------------------+"#
r#"| |"#
r#"|{ |"#
r#"| "id": "0001", |"#
r#"| "batters": { |"#
r#"| "batter": [ |"#
r#"| { "id": "1002", "type": "Chocolate" },|"#
r#"| ] |"#
r#"| }, |"#
r#"| "topping": [ |"#
r#"| { "id": "5003", "type": "Chocolate" }, |"#
r#"| { "id": "5004", "type": "Maple" } |"#
r#"| ] |"#
r#"|} |"#
r#"+--------------------------------------------------+"#
),
);
assert_eq!(
grid.clone()
.config(|cfg| cfg.set_formatting(Entity::Global, Formatting::new(true, false, true)))
.build(),
static_table!(
r#"+--------------------------------------------------+"#
r#"| |"#
r#"|{ |"#
r#"|"id": "0001", |"#
r#"|"batters": { |"#
r#"|"batter": [ |"#
r#"|{ "id": "1002", "type": "Chocolate" }, |"#
r#"|] |"#
r#"|}, |"#
r#"|"topping": [ |"#
r#"|{ "id": "5003", "type": "Chocolate" }, |"#
r#"|{ "id": "5004", "type": "Maple" } |"#
r#"|] |"#
r#"|} |"#
r#"+--------------------------------------------------+"#
),
);
assert_eq!(
grid.config(|cfg| cfg.set_formatting(Entity::Global, Formatting::new(true, true, true)))
.build(),
static_table!(
r#"+--------------------------------------------------+"#
r#"|{ |"#
r#"|"id": "0001", |"#
r#"|"batters": { |"#
r#"|"batter": [ |"#
r#"|{ "id": "1002", "type": "Chocolate" }, |"#
r#"|] |"#
r#"|}, |"#
r#"|"topping": [ |"#
r#"|{ "id": "5003", "type": "Chocolate" }, |"#
r#"|{ "id": "5004", "type": "Maple" } |"#
r#"|] |"#
r#"|} |"#
r#"| |"#
r#"+--------------------------------------------------+"#
),
);
}
#[test]
fn tabs_arent_handled() {
let json = "{
\t\t \"id\": \"1\",
\t\t \"name\": \"Hello World\",
\t\t \"list\": [
\t\t\t\t [1, 2, 3],
\t\t\t\t [4, 5, 6],
\t\t ]
}";
let grid = grid(1, 1).data([[json]]);
assert_eq!(
grid.build(),
static_table!(
"+-----------------------+"
"|{ |"
"|\t\t \"id\": \"1\", |"
"|\t\t \"name\": \"Hello World\",|"
"|\t\t \"list\": [ |"
"|\t\t\t\t [1, 2, 3], |"
"|\t\t\t\t [4, 5, 6], |"
"|\t\t ] |"
"|} |"
"+-----------------------+"
),
);
}