231 lines
5.2 KiB
Rust
231 lines
5.2 KiB
Rust
#![allow(clippy::unwrap_used)]
|
|
|
|
use crate::expressions::types::{Area, CellReferenceIndex};
|
|
use crate::test::util::new_empty_model;
|
|
|
|
#[test]
|
|
fn test_move_formula() {
|
|
let mut model = new_empty_model();
|
|
|
|
let source = &CellReferenceIndex {
|
|
sheet: 0,
|
|
column: 1,
|
|
row: 1,
|
|
};
|
|
let value = "=A2+3";
|
|
let target = &CellReferenceIndex {
|
|
sheet: 0,
|
|
column: 10,
|
|
row: 10,
|
|
};
|
|
|
|
// if we move just one point formula does ot change
|
|
let area = &Area {
|
|
sheet: 0,
|
|
row: 1,
|
|
column: 1,
|
|
width: 1,
|
|
height: 1,
|
|
};
|
|
let t = model.move_cell_value_to_area(value, source, target, area);
|
|
assert!(t.is_ok());
|
|
assert_eq!(t.unwrap(), "=A2+3");
|
|
|
|
// if we move a 2x2 square formula does change
|
|
let area = &Area {
|
|
sheet: 0,
|
|
row: 1,
|
|
column: 1,
|
|
width: 2,
|
|
height: 2,
|
|
};
|
|
let t = model.move_cell_value_to_area(value, source, target, area);
|
|
assert!(t.is_ok());
|
|
assert_eq!(t.unwrap(), "=J11+3");
|
|
}
|
|
|
|
#[test]
|
|
fn test_move_formula_wrong_args() {
|
|
let mut model = new_empty_model();
|
|
let t = model.add_sheet("Sheet2");
|
|
assert!(t.is_ok());
|
|
|
|
let source = &CellReferenceIndex {
|
|
sheet: 0,
|
|
column: 5,
|
|
row: 5,
|
|
};
|
|
let value = "=A2+3";
|
|
let target = &CellReferenceIndex {
|
|
sheet: 0,
|
|
column: 10,
|
|
row: 10,
|
|
};
|
|
|
|
// different sheet
|
|
{
|
|
let area = &Area {
|
|
sheet: 1,
|
|
row: 5,
|
|
column: 5,
|
|
width: 1,
|
|
height: 1,
|
|
};
|
|
let t = model.move_cell_value_to_area(value, source, target, area);
|
|
assert_eq!(
|
|
t,
|
|
Err("Source and area are in different sheets".to_string())
|
|
);
|
|
}
|
|
|
|
// not in area
|
|
{
|
|
let area = &Area {
|
|
sheet: 0,
|
|
row: 6,
|
|
column: 4,
|
|
width: 5,
|
|
height: 5,
|
|
};
|
|
let t = model.move_cell_value_to_area(value, source, target, area);
|
|
assert_eq!(t, Err("Source is outside the area".to_string()));
|
|
}
|
|
|
|
{
|
|
let area = &Area {
|
|
sheet: 0,
|
|
row: 1,
|
|
column: 4,
|
|
width: 5,
|
|
height: 2,
|
|
};
|
|
let t = model.move_cell_value_to_area(value, source, target, area);
|
|
assert_eq!(t, Err("Source is outside the area".to_string()));
|
|
}
|
|
|
|
{
|
|
let area = &Area {
|
|
sheet: 0,
|
|
row: 1,
|
|
column: 6,
|
|
width: 20,
|
|
height: 5,
|
|
};
|
|
let t = model.move_cell_value_to_area(value, source, target, area);
|
|
assert_eq!(t, Err("Source is outside the area".to_string()));
|
|
}
|
|
|
|
// Invalid sheet indexes
|
|
assert_eq!(
|
|
model.move_cell_value_to_area(
|
|
value,
|
|
&CellReferenceIndex {
|
|
sheet: 0,
|
|
row: 1,
|
|
column: 4,
|
|
},
|
|
&CellReferenceIndex {
|
|
sheet: 16,
|
|
row: 1,
|
|
column: 1,
|
|
},
|
|
&Area {
|
|
sheet: 0,
|
|
row: 1,
|
|
column: 4,
|
|
width: 5,
|
|
height: 2,
|
|
}
|
|
),
|
|
Err("Could not find target worksheet: Invalid sheet index".to_string())
|
|
);
|
|
assert_eq!(
|
|
model.move_cell_value_to_area(
|
|
value,
|
|
&CellReferenceIndex {
|
|
sheet: 3,
|
|
column: 1,
|
|
row: 1,
|
|
},
|
|
target,
|
|
&Area {
|
|
sheet: 3,
|
|
row: 1,
|
|
column: 1,
|
|
width: 5,
|
|
height: 5,
|
|
},
|
|
),
|
|
Err("Could not find source worksheet: Invalid sheet index".to_string())
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn test_move_formula_rectangle() {
|
|
let mut model = new_empty_model();
|
|
|
|
let value = "=B2+C2";
|
|
let target = &CellReferenceIndex {
|
|
sheet: 0,
|
|
column: 10,
|
|
row: 10,
|
|
};
|
|
|
|
// if we move just one point formula does not change
|
|
let area = &Area {
|
|
sheet: 0,
|
|
row: 1,
|
|
column: 1,
|
|
width: 2,
|
|
height: 20,
|
|
};
|
|
assert!(model
|
|
.move_cell_value_to_area(
|
|
value,
|
|
&CellReferenceIndex {
|
|
sheet: 0,
|
|
column: 3,
|
|
row: 1,
|
|
},
|
|
target,
|
|
area
|
|
)
|
|
.is_err());
|
|
assert!(model
|
|
.move_cell_value_to_area(
|
|
value,
|
|
&CellReferenceIndex {
|
|
sheet: 0,
|
|
column: 2,
|
|
row: 1,
|
|
},
|
|
target,
|
|
area
|
|
)
|
|
.is_ok());
|
|
assert!(model
|
|
.move_cell_value_to_area(
|
|
value,
|
|
&CellReferenceIndex {
|
|
sheet: 0,
|
|
column: 1,
|
|
row: 20,
|
|
},
|
|
target,
|
|
area
|
|
)
|
|
.is_ok());
|
|
assert!(model
|
|
.move_cell_value_to_area(
|
|
value,
|
|
&CellReferenceIndex {
|
|
sheet: 0,
|
|
column: 1,
|
|
row: 21,
|
|
},
|
|
target,
|
|
area
|
|
)
|
|
.is_err());
|
|
}
|