fix empty row deletion
This commit is contained in:
committed by
Nicolás Hatcher Andrés
parent
b07603b728
commit
a2181a5a48
@@ -4,6 +4,7 @@
|
|||||||
use bitcode::decode;
|
use bitcode::decode;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
constants::{LAST_COLUMN, LAST_ROW},
|
||||||
test::util::new_empty_model,
|
test::util::new_empty_model,
|
||||||
user_model::history::{Diff, QueueDiffs},
|
user_model::history::{Diff, QueueDiffs},
|
||||||
UserModel,
|
UserModel,
|
||||||
@@ -225,3 +226,21 @@ fn delete_mixed_empty_and_filled_rows() {
|
|||||||
assert_eq!(model.get_formatted_cell_value(0, 9, 1).unwrap(), "Row9");
|
assert_eq!(model.get_formatted_cell_value(0, 9, 1).unwrap(), "Row9");
|
||||||
assert_eq!(model.get_formatted_cell_value(0, 10, 1).unwrap(), "After");
|
assert_eq!(model.get_formatted_cell_value(0, 10, 1).unwrap(), "After");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn boundary_validation() {
|
||||||
|
let base = new_empty_model();
|
||||||
|
let mut model = UserModel::from_model(base);
|
||||||
|
|
||||||
|
// Test deleting rows beyond valid range
|
||||||
|
assert!(model.delete_rows(0, LAST_ROW, 2).is_err());
|
||||||
|
assert!(model.delete_rows(0, LAST_ROW + 1, 1).is_err());
|
||||||
|
|
||||||
|
// Test deleting columns beyond valid range
|
||||||
|
assert!(model.delete_columns(0, LAST_COLUMN, 2).is_err());
|
||||||
|
assert!(model.delete_columns(0, LAST_COLUMN + 1, 1).is_err());
|
||||||
|
|
||||||
|
// Test valid boundary deletions (should work with our empty row fix)
|
||||||
|
assert!(model.delete_rows(0, LAST_ROW, 1).is_ok());
|
||||||
|
assert!(model.delete_columns(0, LAST_COLUMN, 1).is_ok());
|
||||||
|
}
|
||||||
|
|||||||
@@ -924,6 +924,10 @@ impl UserModel {
|
|||||||
// Collect diffs from bottom to top so that `undo` re-inserts rows
|
// Collect diffs from bottom to top so that `undo` re-inserts rows
|
||||||
// in the correct order (top to bottom).
|
// in the correct order (top to bottom).
|
||||||
for r in (row..row + row_count).rev() {
|
for r in (row..row + row_count).rev() {
|
||||||
|
if !is_valid_row(r) {
|
||||||
|
return Err(format!("Row number '{r}' is not valid."));
|
||||||
|
}
|
||||||
|
|
||||||
let mut row_data = None;
|
let mut row_data = None;
|
||||||
for rd in &worksheet.rows {
|
for rd in &worksheet.rows {
|
||||||
if rd.r == r {
|
if rd.r == r {
|
||||||
|
|||||||
Reference in New Issue
Block a user