Files
IronCalc/base/src/test/user_model/test_undo_redo.rs
Nicolás Hatcher Andrés d445553d85 UPDATE: Adds 'user model' API (#27)
* bump version for documentation
* Fixes wrong doc comment
* renames old APIs to be consistent
2024-04-03 22:41:15 +02:00

67 lines
2.2 KiB
Rust

#![allow(clippy::unwrap_used)]
use crate::{test::util::new_empty_model, UserModel};
#[test]
fn simple_undo_redo() {
let model = new_empty_model();
let mut model = UserModel::from_model(model);
// at the beginning I cannot undo or redo
assert!(!model.can_undo());
assert!(!model.can_redo());
assert!(model.set_user_input(0, 1, 1, "=1+2").is_ok());
// Once I enter a value I can undo but not redo
assert!(model.can_undo());
assert!(!model.can_redo());
assert_eq!(model.get_formatted_cell_value(0, 1, 1), Ok("3".to_string()));
// If I undo, I can't undo anymore, but I can redo
assert!(model.undo().is_ok());
assert!(!model.can_undo());
assert!(model.can_redo());
assert_eq!(model.get_formatted_cell_value(0, 1, 1), Ok("".to_string()));
// If I redo, I have the old value and formula
assert!(model.redo().is_ok());
assert_eq!(model.get_formatted_cell_value(0, 1, 1), Ok("3".to_string()));
assert_eq!(model.get_cell_content(0, 1, 1), Ok("=1+2".to_string()));
assert!(model.can_undo());
assert!(!model.can_redo());
}
#[test]
fn undo_redo_respect_styles() {
let model = new_empty_model();
let mut model = UserModel::from_model(model);
assert!(model.set_user_input(0, 1, 1, "100").is_ok());
assert!(model.set_user_input(0, 1, 1, "125$").is_ok());
// The content of the cell is just the number 125
assert_eq!(model.get_cell_content(0, 1, 1), Ok("125".to_string()));
assert!(model.undo().is_ok());
// The cell has no currency number formatting
assert_eq!(
model.get_formatted_cell_value(0, 1, 1),
Ok("100".to_string())
);
assert_eq!(model.get_cell_content(0, 1, 1), Ok("100".to_string()));
assert!(model.redo().is_ok());
// The cell has the number 125 formatted as '125$'
assert_eq!(
model.get_formatted_cell_value(0, 1, 1),
Ok("125$".to_string())
);
assert_eq!(model.get_cell_content(0, 1, 1), Ok("125".to_string()));
}
#[test]
fn can_undo_can_redo() {
let model = new_empty_model();
let mut model = UserModel::from_model(model);
assert!(!model.can_undo());
assert!(!model.can_redo());
assert!(model.undo().is_ok());
assert!(model.redo().is_ok());
}