UPDATE: Dump of initial files
This commit is contained in:
230
base/src/test/test_move_formula.rs
Normal file
230
base/src/test/test_move_formula.rs
Normal file
@@ -0,0 +1,230 @@
|
||||
#![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());
|
||||
}
|
||||
Reference in New Issue
Block a user