From 80273a88ec496ca1dc1f6272d0728bf15042d36b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Hatcher?= Date: Thu, 24 Oct 2024 00:11:32 +0200 Subject: [PATCH] FIX: When creating a new sheet, select it Fixes #100 --- .../test/user_model/test_add_delete_sheets.rs | 20 +++++++++++++------ base/src/test/user_model/test_diff_queue.rs | 2 +- base/src/test/user_model/test_grid_lines.rs | 2 +- base/src/test/user_model/test_view.rs | 10 +++++----- base/src/user_model/common.rs | 4 +++- bindings/wasm/src/lib.rs | 4 ++-- 6 files changed, 26 insertions(+), 16 deletions(-) diff --git a/base/src/test/user_model/test_add_delete_sheets.rs b/base/src/test/user_model/test_add_delete_sheets.rs index cc07536..c227316 100644 --- a/base/src/test/user_model/test_add_delete_sheets.rs +++ b/base/src/test/user_model/test_add_delete_sheets.rs @@ -5,13 +5,13 @@ use crate::{constants::DEFAULT_COLUMN_WIDTH, UserModel}; #[test] fn add_undo_redo() { let mut model = UserModel::new_empty("model", "en", "UTC").unwrap(); - model.new_sheet(); + model.new_sheet().unwrap(); model.set_user_input(1, 1, 1, "=1 + 1").unwrap(); model.set_user_input(1, 1, 2, "=A1*3").unwrap(); model .set_column_width(1, 5, 5.0 * DEFAULT_COLUMN_WIDTH) .unwrap(); - model.new_sheet(); + model.new_sheet().unwrap(); model.set_user_input(2, 1, 1, "=Sheet2!B1").unwrap(); model.undo().unwrap(); @@ -59,7 +59,7 @@ fn set_sheet_color() { #[test] fn new_sheet_propagates() { let mut model = UserModel::new_empty("model", "en", "UTC").unwrap(); - model.new_sheet(); + model.new_sheet().unwrap(); let send_queue = model.flush_send_queue(); @@ -72,7 +72,7 @@ fn new_sheet_propagates() { #[test] fn delete_sheet_propagates() { let mut model = UserModel::new_empty("model", "en", "UTC").unwrap(); - model.new_sheet(); + model.new_sheet().unwrap(); model.delete_sheet(0).unwrap(); let send_queue = model.flush_send_queue(); @@ -87,10 +87,18 @@ fn delete_sheet_propagates() { fn delete_last_sheet() { // Deleting the last sheet, selects the previous let mut model = UserModel::new_empty("model", "en", "UTC").unwrap(); - model.new_sheet(); - model.new_sheet(); + model.new_sheet().unwrap(); + model.new_sheet().unwrap(); model.set_selected_sheet(2).unwrap(); model.delete_sheet(2).unwrap(); assert_eq!(model.get_selected_sheet(), 1); } + +#[test] +fn new_sheet_selects_it() { + let mut model = UserModel::new_empty("model", "en", "UTC").unwrap(); + assert_eq!(model.get_selected_sheet(), 0); + model.new_sheet().unwrap(); + assert_eq!(model.get_selected_sheet(), 1); +} diff --git a/base/src/test/user_model/test_diff_queue.rs b/base/src/test/user_model/test_diff_queue.rs index 3760235..01c3de4 100644 --- a/base/src/test/user_model/test_diff_queue.rs +++ b/base/src/test/user_model/test_diff_queue.rs @@ -138,7 +138,7 @@ fn queue_undo_redo_multiple() { #[test] fn new_sheet() { let mut model1 = UserModel::from_model(new_empty_model()); - model1.new_sheet(); + model1.new_sheet().unwrap(); model1.set_user_input(0, 1, 1, "42").unwrap(); model1.set_user_input(1, 1, 1, "=Sheet1!A1*2").unwrap(); diff --git a/base/src/test/user_model/test_grid_lines.rs b/base/src/test/user_model/test_grid_lines.rs index 6abc7d9..6656602 100644 --- a/base/src/test/user_model/test_grid_lines.rs +++ b/base/src/test/user_model/test_grid_lines.rs @@ -7,7 +7,7 @@ use crate::UserModel; fn basic_tests() { let model = new_empty_model(); let mut model = UserModel::from_model(model); - model.new_sheet(); + model.new_sheet().unwrap(); // default sheet has show_grid_lines = true assert_eq!(model.get_show_grid_lines(0), Ok(true)); diff --git a/base/src/test/user_model/test_view.rs b/base/src/test/user_model/test_view.rs index 3f9d907..1ec665f 100644 --- a/base/src/test/user_model/test_view.rs +++ b/base/src/test/user_model/test_view.rs @@ -65,13 +65,13 @@ fn set_the_range_does_not_set_the_cell() { fn add_new_sheet_and_back() { let model = new_empty_model(); let mut model = UserModel::from_model(model); - model.new_sheet(); - assert_eq!(model.get_selected_sheet(), 0); + model.new_sheet().unwrap(); + assert_eq!(model.get_selected_sheet(), 1); model.set_selected_cell(5, 4).unwrap(); - model.set_selected_sheet(1).unwrap(); - assert_eq!(model.get_selected_cell(), (1, 1, 1)); model.set_selected_sheet(0).unwrap(); - assert_eq!(model.get_selected_cell(), (0, 5, 4)); + assert_eq!(model.get_selected_cell(), (0, 1, 1)); + model.set_selected_sheet(1).unwrap(); + assert_eq!(model.get_selected_cell(), (1, 5, 4)); } #[test] diff --git a/base/src/user_model/common.rs b/base/src/user_model/common.rs index 45602cd..996c393 100644 --- a/base/src/user_model/common.rs +++ b/base/src/user_model/common.rs @@ -424,9 +424,11 @@ impl UserModel { /// /// See also: /// * [Model::new_sheet] - pub fn new_sheet(&mut self) { + pub fn new_sheet(&mut self) -> Result<(), String> { let (name, index) = self.model.new_sheet(); + self.set_selected_sheet(index)?; self.push_diff_list(vec![Diff::NewSheet { index, name }]); + Ok(()) } /// Deletes sheet by index diff --git a/bindings/wasm/src/lib.rs b/bindings/wasm/src/lib.rs index 5e3e6ad..200e138 100644 --- a/bindings/wasm/src/lib.rs +++ b/bindings/wasm/src/lib.rs @@ -97,8 +97,8 @@ impl Model { } #[wasm_bindgen(js_name = "newSheet")] - pub fn new_sheet(&mut self) { - self.model.new_sheet() + pub fn new_sheet(&mut self) -> Result<(), JsError> { + self.model.new_sheet().map_err(to_js_error) } #[wasm_bindgen(js_name = "deleteSheet")]