Files
IronCalc/base/src/test/test_column_width.rs
Sinan Yumurtacı eee40c1b9a FIX: Prevent negative column width, row height (#167)
* Prevent negative column width / row height in rust

* prevent in front-end
2024-12-11 00:07:06 +01:00

103 lines
3.3 KiB
Rust

#![allow(clippy::unwrap_used)]
use crate::constants::{COLUMN_WIDTH_FACTOR, DEFAULT_COLUMN_WIDTH};
use crate::test::util::new_empty_model;
use crate::types::Col;
#[test]
fn test_column_width() {
let mut model = new_empty_model();
let cols = vec![Col {
custom_width: false,
max: 16384,
min: 1,
style: Some(6),
width: 8.7,
}];
model.workbook.worksheets[0].cols = cols;
model
.workbook
.worksheet_mut(0)
.unwrap()
.set_column_width(2, 30.0)
.unwrap();
assert_eq!(model.workbook.worksheets[0].cols.len(), 3);
let worksheet = model.workbook.worksheet(0).unwrap();
assert!((worksheet.get_column_width(1).unwrap() - DEFAULT_COLUMN_WIDTH).abs() < f64::EPSILON);
assert!((worksheet.get_column_width(2).unwrap() - 30.0).abs() < f64::EPSILON);
assert!((worksheet.get_column_width(3).unwrap() - DEFAULT_COLUMN_WIDTH).abs() < f64::EPSILON);
assert_eq!(model.get_cell_style_index(0, 23, 2), Ok(6));
}
#[test]
fn test_column_width_lower_edge() {
let mut model = new_empty_model();
let cols = vec![Col {
custom_width: true,
max: 16,
min: 5,
style: Some(1),
width: 10.0,
}];
model.workbook.worksheets[0].cols = cols;
model
.workbook
.worksheet_mut(0)
.unwrap()
.set_column_width(5, 30.0)
.unwrap();
assert_eq!(model.workbook.worksheets[0].cols.len(), 2);
let worksheet = model.workbook.worksheet(0).unwrap();
assert!((worksheet.get_column_width(4).unwrap() - DEFAULT_COLUMN_WIDTH).abs() < f64::EPSILON);
assert!((worksheet.get_column_width(5).unwrap() - 30.0).abs() < f64::EPSILON);
assert!(
(worksheet.get_column_width(6).unwrap() - 10.0 * COLUMN_WIDTH_FACTOR).abs() < f64::EPSILON
);
assert_eq!(model.get_cell_style_index(0, 23, 5), Ok(1));
}
#[test]
fn test_column_width_higher_edge() {
let mut model = new_empty_model();
let cols = vec![Col {
custom_width: true,
max: 16,
min: 5,
style: Some(1),
width: 10.0,
}];
model.workbook.worksheets[0].cols = cols;
model
.workbook
.worksheet_mut(0)
.unwrap()
.set_column_width(16, 30.0)
.unwrap();
assert_eq!(model.workbook.worksheets[0].cols.len(), 2);
let worksheet = model.workbook.worksheet(0).unwrap();
assert!(
(worksheet.get_column_width(15).unwrap() - 10.0 * COLUMN_WIDTH_FACTOR).abs() < f64::EPSILON
);
assert!((worksheet.get_column_width(16).unwrap() - 30.0).abs() < f64::EPSILON);
assert!((worksheet.get_column_width(17).unwrap() - DEFAULT_COLUMN_WIDTH).abs() < f64::EPSILON);
assert_eq!(model.get_cell_style_index(0, 23, 16), Ok(1));
}
#[test]
fn test_column_width_negative() {
let mut model = new_empty_model();
let result = model
.workbook
.worksheet_mut(0)
.unwrap()
.set_column_width(16, -1.0);
assert_eq!(result, Err("Can not set a negative width: -1".to_string()));
assert_eq!(model.workbook.worksheets[0].cols.len(), 0);
let worksheet = model.workbook.worksheet(0).unwrap();
assert_eq!(
(worksheet.get_column_width(16).unwrap()),
DEFAULT_COLUMN_WIDTH
);
assert_eq!(model.get_cell_style_index(0, 23, 16), Ok(0));
}