417 lines
12 KiB
Rust
417 lines
12 KiB
Rust
#![allow(clippy::unwrap_used)]
|
|
|
|
use crate::{
|
|
expressions::{types::Area, utils::number_to_column},
|
|
types::{Border, BorderItem, BorderStyle},
|
|
BorderArea, UserModel,
|
|
};
|
|
|
|
#[test]
|
|
fn borders_all() {
|
|
let mut model = UserModel::new_empty("model", "en", "UTC").unwrap();
|
|
// We set an outer border in cells F5:H9
|
|
let range = &Area {
|
|
sheet: 0,
|
|
row: 5,
|
|
column: 6,
|
|
width: 3,
|
|
height: 4,
|
|
};
|
|
assert_eq!(number_to_column(6).unwrap(), "F");
|
|
assert_eq!(number_to_column(8).unwrap(), "H");
|
|
// ATM we don't have a way to create the object from Rust, that's ok.
|
|
let border_area: BorderArea = serde_json::from_str(
|
|
r##"{
|
|
"item": {
|
|
"style": "thin",
|
|
"color": "#FF5566"
|
|
},
|
|
"type": "All"
|
|
}"##,
|
|
)
|
|
.unwrap();
|
|
model.set_area_with_border(range, &border_area).unwrap();
|
|
for row in 5..9 {
|
|
for column in 6..9 {
|
|
let style = model.get_cell_style(0, row, column).unwrap();
|
|
let border_item = BorderItem {
|
|
style: BorderStyle::Thin,
|
|
color: Some("#FF5566".to_string()),
|
|
};
|
|
let expected_border = Border {
|
|
diagonal_up: false,
|
|
diagonal_down: false,
|
|
left: Some(border_item.clone()),
|
|
right: Some(border_item.clone()),
|
|
top: Some(border_item.clone()),
|
|
bottom: Some(border_item.clone()),
|
|
diagonal: None,
|
|
};
|
|
assert_eq!(style.border, expected_border);
|
|
}
|
|
}
|
|
|
|
// Lets remove all of them:
|
|
let border_area: BorderArea = serde_json::from_str(
|
|
r##"{
|
|
"item": {
|
|
"style": "thin",
|
|
"color": "#FF5566"
|
|
},
|
|
"type": "None"
|
|
}"##,
|
|
)
|
|
.unwrap();
|
|
model.set_area_with_border(range, &border_area).unwrap();
|
|
for row in 5..9 {
|
|
for column in 6..9 {
|
|
let style = model.get_cell_style(0, row, column).unwrap();
|
|
let expected_border = Border {
|
|
diagonal_up: false,
|
|
diagonal_down: false,
|
|
left: None,
|
|
right: None,
|
|
top: None,
|
|
bottom: None,
|
|
diagonal: None,
|
|
};
|
|
assert_eq!(style.border, expected_border);
|
|
}
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn borders_inner() {
|
|
let mut model = UserModel::new_empty("model", "en", "UTC").unwrap();
|
|
// We set an outer border in cells F5:H9
|
|
let range = &Area {
|
|
sheet: 0,
|
|
row: 5,
|
|
column: 6,
|
|
width: 3,
|
|
height: 4,
|
|
};
|
|
assert_eq!(number_to_column(6).unwrap(), "F");
|
|
assert_eq!(number_to_column(8).unwrap(), "H");
|
|
// ATM we don't have a way to create the object from Rust, that's ok.
|
|
let border_area: BorderArea = serde_json::from_str(
|
|
r##"{
|
|
"item": {
|
|
"style": "thin",
|
|
"color": "#FF5566"
|
|
},
|
|
"type": "Inner"
|
|
}"##,
|
|
)
|
|
.unwrap();
|
|
model.set_area_with_border(range, &border_area).unwrap();
|
|
// The inner part all have borders
|
|
for row in 6..8 {
|
|
for column in 7..8 {
|
|
let style = model.get_cell_style(0, row, column).unwrap();
|
|
let border_item = BorderItem {
|
|
style: BorderStyle::Thin,
|
|
color: Some("#FF5566".to_string()),
|
|
};
|
|
let expected_border = Border {
|
|
diagonal_up: false,
|
|
diagonal_down: false,
|
|
left: Some(border_item.clone()),
|
|
right: Some(border_item.clone()),
|
|
top: Some(border_item.clone()),
|
|
bottom: Some(border_item.clone()),
|
|
diagonal: None,
|
|
};
|
|
assert_eq!(style.border, expected_border);
|
|
}
|
|
}
|
|
// F5 has border only left and bottom
|
|
{
|
|
// We check the border on F5
|
|
let style = model.get_cell_style(0, 5, 6).unwrap();
|
|
let border_item = BorderItem {
|
|
style: BorderStyle::Thin,
|
|
color: Some("#FF5566".to_string()),
|
|
};
|
|
// It should be right and bottom
|
|
let expected_border = Border {
|
|
diagonal_up: false,
|
|
diagonal_down: false,
|
|
left: None,
|
|
right: Some(border_item.clone()),
|
|
top: None,
|
|
bottom: Some(border_item),
|
|
diagonal: None,
|
|
};
|
|
assert_eq!(style.border, expected_border);
|
|
}
|
|
{
|
|
// Then let's try the bottom-right border
|
|
let style = model.get_cell_style(0, 8, 8).unwrap();
|
|
let border_item = BorderItem {
|
|
style: BorderStyle::Thin,
|
|
color: Some("#FF5566".to_string()),
|
|
};
|
|
// It should be only left and top
|
|
let expected_border = Border {
|
|
diagonal_up: false,
|
|
diagonal_down: false,
|
|
left: Some(border_item.clone()),
|
|
right: None,
|
|
top: Some(border_item.clone()),
|
|
bottom: None,
|
|
diagonal: None,
|
|
};
|
|
assert_eq!(style.border, expected_border);
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn borders_outer() {
|
|
let mut model = UserModel::new_empty("model", "en", "UTC").unwrap();
|
|
// We set an outer border in cells F5:H9
|
|
let range = &Area {
|
|
sheet: 0,
|
|
row: 5,
|
|
column: 6,
|
|
width: 3,
|
|
height: 4,
|
|
};
|
|
assert_eq!(number_to_column(6).unwrap(), "F");
|
|
assert_eq!(number_to_column(8).unwrap(), "H");
|
|
// ATM we don't have a way to create the object from Rust, that's ok.
|
|
let border_area: BorderArea = serde_json::from_str(
|
|
r##"{
|
|
"item": {
|
|
"style": "thin",
|
|
"color": "#FF5566"
|
|
},
|
|
"type": "Outer"
|
|
}"##,
|
|
)
|
|
.unwrap();
|
|
model.set_area_with_border(range, &border_area).unwrap();
|
|
{
|
|
// We check the border on F5
|
|
let style = model.get_cell_style(0, 5, 6).unwrap();
|
|
let border_item = BorderItem {
|
|
style: BorderStyle::Thin,
|
|
color: Some("#FF5566".to_string()),
|
|
};
|
|
// It should be only left and top
|
|
let expected_border = Border {
|
|
diagonal_up: false,
|
|
diagonal_down: false,
|
|
left: Some(border_item.clone()),
|
|
right: None,
|
|
top: Some(border_item),
|
|
bottom: None,
|
|
diagonal: None,
|
|
};
|
|
assert_eq!(style.border, expected_border);
|
|
}
|
|
{
|
|
// Then let's try the bottom-right border
|
|
let style = model.get_cell_style(0, 8, 8).unwrap();
|
|
let border_item = BorderItem {
|
|
style: BorderStyle::Thin,
|
|
color: Some("#FF5566".to_string()),
|
|
};
|
|
// It should be only left and top
|
|
let expected_border = Border {
|
|
diagonal_up: false,
|
|
diagonal_down: false,
|
|
left: None,
|
|
right: Some(border_item.clone()),
|
|
top: None,
|
|
bottom: Some(border_item.clone()),
|
|
diagonal: None,
|
|
};
|
|
assert_eq!(style.border, expected_border);
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn borders_top() {
|
|
let mut model = UserModel::new_empty("model", "en", "UTC").unwrap();
|
|
// We set an outer border in cells F5:H9
|
|
let range = &Area {
|
|
sheet: 0,
|
|
row: 5,
|
|
column: 6,
|
|
width: 3,
|
|
height: 4,
|
|
};
|
|
assert_eq!(number_to_column(6).unwrap(), "F");
|
|
assert_eq!(number_to_column(8).unwrap(), "H");
|
|
// ATM we don't have a way to create the object from Rust, that's ok.
|
|
let border_area: BorderArea = serde_json::from_str(
|
|
r##"{
|
|
"item": {
|
|
"style": "thin",
|
|
"color": "#FF5566"
|
|
},
|
|
"type": "Top"
|
|
}"##,
|
|
)
|
|
.unwrap();
|
|
model.set_area_with_border(range, &border_area).unwrap();
|
|
for row in 5..9 {
|
|
for column in 6..9 {
|
|
let style = model.get_cell_style(0, row, column).unwrap();
|
|
let border_item = BorderItem {
|
|
style: BorderStyle::Thin,
|
|
color: Some("#FF5566".to_string()),
|
|
};
|
|
let expected_border = Border {
|
|
diagonal_up: false,
|
|
diagonal_down: false,
|
|
left: None,
|
|
right: None,
|
|
top: Some(border_item.clone()),
|
|
bottom: None,
|
|
diagonal: None,
|
|
};
|
|
assert_eq!(style.border, expected_border);
|
|
}
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn borders_right() {
|
|
let mut model = UserModel::new_empty("model", "en", "UTC").unwrap();
|
|
// We set an outer border in cells F5:H9
|
|
let range = &Area {
|
|
sheet: 0,
|
|
row: 5,
|
|
column: 6,
|
|
width: 3,
|
|
height: 4,
|
|
};
|
|
assert_eq!(number_to_column(6).unwrap(), "F");
|
|
assert_eq!(number_to_column(8).unwrap(), "H");
|
|
// ATM we don't have a way to create the object from Rust, that's ok.
|
|
let border_area: BorderArea = serde_json::from_str(
|
|
r##"{
|
|
"item": {
|
|
"style": "thin",
|
|
"color": "#FF5566"
|
|
},
|
|
"type": "Right"
|
|
}"##,
|
|
)
|
|
.unwrap();
|
|
model.set_area_with_border(range, &border_area).unwrap();
|
|
for row in 5..9 {
|
|
for column in 6..9 {
|
|
let style = model.get_cell_style(0, row, column).unwrap();
|
|
let border_item = BorderItem {
|
|
style: BorderStyle::Thin,
|
|
color: Some("#FF5566".to_string()),
|
|
};
|
|
let expected_border = Border {
|
|
diagonal_up: false,
|
|
diagonal_down: false,
|
|
left: None,
|
|
right: Some(border_item.clone()),
|
|
top: None,
|
|
bottom: None,
|
|
diagonal: None,
|
|
};
|
|
assert_eq!(style.border, expected_border);
|
|
}
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn borders_bottom() {
|
|
let mut model = UserModel::new_empty("model", "en", "UTC").unwrap();
|
|
// We set an outer border in cells F5:H9
|
|
let range = &Area {
|
|
sheet: 0,
|
|
row: 5,
|
|
column: 6,
|
|
width: 3,
|
|
height: 4,
|
|
};
|
|
assert_eq!(number_to_column(6).unwrap(), "F");
|
|
assert_eq!(number_to_column(8).unwrap(), "H");
|
|
// ATM we don't have a way to create the object from Rust, that's ok.
|
|
let border_area: BorderArea = serde_json::from_str(
|
|
r##"{
|
|
"item": {
|
|
"style": "thin",
|
|
"color": "#FF5566"
|
|
},
|
|
"type": "Bottom"
|
|
}"##,
|
|
)
|
|
.unwrap();
|
|
model.set_area_with_border(range, &border_area).unwrap();
|
|
for row in 5..9 {
|
|
for column in 6..9 {
|
|
let style = model.get_cell_style(0, row, column).unwrap();
|
|
let border_item = BorderItem {
|
|
style: BorderStyle::Thin,
|
|
color: Some("#FF5566".to_string()),
|
|
};
|
|
let expected_border = Border {
|
|
diagonal_up: false,
|
|
diagonal_down: false,
|
|
left: None,
|
|
right: None,
|
|
top: None,
|
|
bottom: Some(border_item.clone()),
|
|
diagonal: None,
|
|
};
|
|
assert_eq!(style.border, expected_border);
|
|
}
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn borders_left() {
|
|
let mut model = UserModel::new_empty("model", "en", "UTC").unwrap();
|
|
// We set an outer border in cells F5:H9
|
|
let range = &Area {
|
|
sheet: 0,
|
|
row: 5,
|
|
column: 6,
|
|
width: 3,
|
|
height: 4,
|
|
};
|
|
assert_eq!(number_to_column(6).unwrap(), "F");
|
|
assert_eq!(number_to_column(8).unwrap(), "H");
|
|
// ATM we don't have a way to create the object from Rust, that's ok.
|
|
let border_area: BorderArea = serde_json::from_str(
|
|
r##"{
|
|
"item": {
|
|
"style": "thin",
|
|
"color": "#FF5566"
|
|
},
|
|
"type": "Left"
|
|
}"##,
|
|
)
|
|
.unwrap();
|
|
model.set_area_with_border(range, &border_area).unwrap();
|
|
for row in 5..9 {
|
|
for column in 6..9 {
|
|
let style = model.get_cell_style(0, row, column).unwrap();
|
|
let border_item = BorderItem {
|
|
style: BorderStyle::Thin,
|
|
color: Some("#FF5566".to_string()),
|
|
};
|
|
let expected_border = Border {
|
|
diagonal_up: false,
|
|
diagonal_down: false,
|
|
left: Some(border_item.clone()),
|
|
right: None,
|
|
top: None,
|
|
bottom: None,
|
|
diagonal: None,
|
|
};
|
|
assert_eq!(style.border, expected_border);
|
|
}
|
|
}
|
|
}
|