183 lines
5.7 KiB
Rust
183 lines
5.7 KiB
Rust
use std::fs;
|
|
|
|
use ironcalc_base::Model;
|
|
|
|
use crate::error::XlsxError;
|
|
use crate::export::save_to_icalc;
|
|
use crate::import::load_from_icalc;
|
|
use crate::{export::save_to_xlsx, import::load_from_xlsx};
|
|
|
|
pub fn new_empty_model() -> Model {
|
|
Model::new_empty("model", "en", "UTC").unwrap()
|
|
}
|
|
|
|
#[test]
|
|
fn test_values() {
|
|
let mut model = new_empty_model();
|
|
// numbers
|
|
model
|
|
.set_user_input(0, 1, 1, "123.456".to_string())
|
|
.unwrap();
|
|
// strings
|
|
model
|
|
.set_user_input(0, 2, 1, "Hello world!".to_string())
|
|
.unwrap();
|
|
model
|
|
.set_user_input(0, 3, 1, "Hello world!".to_string())
|
|
.unwrap();
|
|
model
|
|
.set_user_input(0, 4, 1, "你好世界!".to_string())
|
|
.unwrap();
|
|
// booleans
|
|
model.set_user_input(0, 5, 1, "TRUE".to_string()).unwrap();
|
|
model.set_user_input(0, 6, 1, "FALSE".to_string()).unwrap();
|
|
// errors
|
|
model
|
|
.set_user_input(0, 7, 1, "#VALUE!".to_string())
|
|
.unwrap();
|
|
|
|
// noop
|
|
model.evaluate();
|
|
{
|
|
let temp_file_name = "temp_file_test_values.xlsx";
|
|
save_to_xlsx(&model, temp_file_name).unwrap();
|
|
|
|
let model = load_from_xlsx(temp_file_name, "en", "UTC").unwrap();
|
|
assert_eq!(model.get_formatted_cell_value(0, 1, 1).unwrap(), "123.456");
|
|
assert_eq!(
|
|
model.get_formatted_cell_value(0, 2, 1).unwrap(),
|
|
"Hello world!"
|
|
);
|
|
assert_eq!(
|
|
model.get_formatted_cell_value(0, 3, 1).unwrap(),
|
|
"Hello world!"
|
|
);
|
|
assert_eq!(
|
|
model.get_formatted_cell_value(0, 4, 1).unwrap(),
|
|
"你好世界!"
|
|
);
|
|
assert_eq!(model.get_formatted_cell_value(0, 5, 1).unwrap(), "TRUE");
|
|
assert_eq!(model.get_formatted_cell_value(0, 6, 1).unwrap(), "FALSE");
|
|
assert_eq!(model.get_formatted_cell_value(0, 7, 1).unwrap(), "#VALUE!");
|
|
|
|
fs::remove_file(temp_file_name).unwrap();
|
|
}
|
|
{
|
|
let temp_file_name = "temp_file_test_values.ic";
|
|
save_to_icalc(&model, temp_file_name).unwrap();
|
|
|
|
let model = load_from_icalc(temp_file_name).unwrap();
|
|
assert_eq!(model.get_formatted_cell_value(0, 1, 1).unwrap(), "123.456");
|
|
assert_eq!(
|
|
model.get_formatted_cell_value(0, 2, 1).unwrap(),
|
|
"Hello world!"
|
|
);
|
|
assert_eq!(
|
|
model.get_formatted_cell_value(0, 3, 1).unwrap(),
|
|
"Hello world!"
|
|
);
|
|
assert_eq!(
|
|
model.get_formatted_cell_value(0, 4, 1).unwrap(),
|
|
"你好世界!"
|
|
);
|
|
assert_eq!(model.get_formatted_cell_value(0, 5, 1).unwrap(), "TRUE");
|
|
assert_eq!(model.get_formatted_cell_value(0, 6, 1).unwrap(), "FALSE");
|
|
assert_eq!(model.get_formatted_cell_value(0, 7, 1).unwrap(), "#VALUE!");
|
|
|
|
fs::remove_file(temp_file_name).unwrap();
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn test_formulas() {
|
|
let mut model = new_empty_model();
|
|
model.set_user_input(0, 1, 1, "5.5".to_string()).unwrap();
|
|
model.set_user_input(0, 2, 1, "6.5".to_string()).unwrap();
|
|
model.set_user_input(0, 3, 1, "7.5".to_string()).unwrap();
|
|
|
|
model.set_user_input(0, 1, 2, "=A1*2".to_string()).unwrap();
|
|
model.set_user_input(0, 2, 2, "=A2*2".to_string()).unwrap();
|
|
model.set_user_input(0, 3, 2, "=A3*2".to_string()).unwrap();
|
|
model
|
|
.set_user_input(0, 4, 2, "=SUM(A1:B3)".to_string())
|
|
.unwrap();
|
|
|
|
model.evaluate();
|
|
let temp_file_name = "temp_file_test_formulas.xlsx";
|
|
save_to_xlsx(&model, temp_file_name).unwrap();
|
|
|
|
let model = load_from_xlsx(temp_file_name, "en", "UTC").unwrap();
|
|
assert_eq!(model.get_formatted_cell_value(0, 1, 2).unwrap(), "11");
|
|
assert_eq!(model.get_formatted_cell_value(0, 2, 2).unwrap(), "13");
|
|
assert_eq!(model.get_formatted_cell_value(0, 3, 2).unwrap(), "15");
|
|
assert_eq!(model.get_formatted_cell_value(0, 4, 2).unwrap(), "58.5");
|
|
fs::remove_file(temp_file_name).unwrap();
|
|
}
|
|
|
|
#[test]
|
|
fn test_sheets() {
|
|
let mut model = new_empty_model();
|
|
model.add_sheet("With space").unwrap();
|
|
// xml escaped
|
|
model.add_sheet("Tango & Cash").unwrap();
|
|
model.add_sheet("你好世界").unwrap();
|
|
|
|
// noop
|
|
model.evaluate();
|
|
|
|
let temp_file_name = "temp_file_test_sheets.xlsx";
|
|
save_to_xlsx(&model, temp_file_name).unwrap();
|
|
|
|
let model = load_from_xlsx(temp_file_name, "en", "UTC").unwrap();
|
|
assert_eq!(
|
|
model.workbook.get_worksheet_names(),
|
|
vec!["Sheet1", "With space", "Tango & Cash", "你好世界"]
|
|
);
|
|
fs::remove_file(temp_file_name).unwrap();
|
|
}
|
|
|
|
#[test]
|
|
fn test_named_styles() {
|
|
let mut model = new_empty_model();
|
|
model.set_user_input(0, 1, 1, "5.5".to_string()).unwrap();
|
|
let mut style = model.get_style_for_cell(0, 1, 1).unwrap();
|
|
style.font.b = true;
|
|
style.font.i = true;
|
|
assert!(model.set_cell_style(0, 1, 1, &style).is_ok());
|
|
let bold_style_index = model.get_cell_style_index(0, 1, 1).unwrap();
|
|
let e = model
|
|
.workbook
|
|
.styles
|
|
.add_named_cell_style("bold & italics", bold_style_index);
|
|
assert!(e.is_ok());
|
|
|
|
// noop
|
|
model.evaluate();
|
|
|
|
let temp_file_name = "temp_file_test_named_styles.xlsx";
|
|
save_to_xlsx(&model, temp_file_name).unwrap();
|
|
|
|
let model = load_from_xlsx(temp_file_name, "en", "UTC").unwrap();
|
|
assert!(model
|
|
.workbook
|
|
.styles
|
|
.get_style_index_by_name("bold & italics")
|
|
.is_ok());
|
|
fs::remove_file(temp_file_name).unwrap();
|
|
}
|
|
|
|
#[test]
|
|
fn test_existing_file() {
|
|
let file_name = "existing_file.xlsx";
|
|
fs::File::create(file_name).unwrap();
|
|
|
|
assert_eq!(
|
|
save_to_xlsx(&new_empty_model(), file_name),
|
|
Err(XlsxError::IO(
|
|
"file existing_file.xlsx already exists".to_string()
|
|
)),
|
|
);
|
|
|
|
fs::remove_file(file_name).unwrap();
|
|
}
|