fix empty row deletion

This commit is contained in:
Brian Hung
2025-07-23 00:00:53 -07:00
committed by Nicolás Hatcher Andrés
parent b07603b728
commit a2181a5a48
2 changed files with 23 additions and 0 deletions

View File

@@ -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());
}

View File

@@ -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 {