UPDATE: Adds bindings to update timezone and locale

UPDATE: Update "generate locale" utility

FIX: Minor fixes to UI and proper support for locales/timezones

UPDATE: Adds "display language" setting to core
This commit is contained in:
Nicolás Hatcher
2025-11-28 21:21:19 +01:00
parent 402a13bd00
commit ffe5d1a158
109 changed files with 4783 additions and 3216 deletions

View File

@@ -15,7 +15,7 @@ use ironcalc_base::{Model, UserModel};
// We check that the output of example.xlsx is what we expect.
#[test]
fn test_example() {
let model = load_from_xlsx("tests/example.xlsx", "en", "UTC").unwrap();
let model = load_from_xlsx("tests/example.xlsx", "en", "UTC", "en").unwrap();
// We should use the API once it is in place
let workbook = model.workbook;
let ws = &workbook.worksheets;
@@ -47,7 +47,7 @@ fn test_example() {
assert_eq!(ws[0].views[&0].column, 5);
assert_eq!(ws[0].views[&0].range, [13, 5, 20, 14]);
let model2 = load_from_icalc("tests/example.ic").unwrap();
let model2 = load_from_icalc("tests/example.ic", "en").unwrap();
let _ = bitcode::encode(&model2.workbook);
assert_eq!(workbook, model2.workbook);
}
@@ -64,7 +64,7 @@ fn test_load_from_xlsx_bytes() {
#[test]
fn no_grid() {
let model = load_from_xlsx("tests/NoGrid.xlsx", "en", "UTC").unwrap();
let model = load_from_xlsx("tests/NoGrid.xlsx", "en", "UTC", "en").unwrap();
{
let workbook = &model.workbook;
let ws = &workbook.worksheets;
@@ -87,7 +87,7 @@ fn no_grid() {
// save it and check again
let temp_file_name = "temp_file_no_grid.xlsx";
save_to_xlsx(&model, temp_file_name).unwrap();
let model = load_from_xlsx(temp_file_name, "en", "UTC").unwrap();
let model = load_from_xlsx(temp_file_name, "en", "UTC", "en").unwrap();
let workbook = &model.workbook;
let ws = &workbook.worksheets;
@@ -110,13 +110,13 @@ fn no_grid() {
#[test]
fn test_save_to_xlsx() {
let mut model = load_from_xlsx("tests/example.xlsx", "en", "UTC").unwrap();
let mut model = load_from_xlsx("tests/example.xlsx", "en", "UTC", "en").unwrap();
model.evaluate();
let temp_file_name = "temp_file_example.xlsx";
// test can safe
save_to_xlsx(&model, temp_file_name).unwrap();
// test can open
let model = load_from_xlsx(temp_file_name, "en", "UTC").unwrap();
let model = load_from_xlsx(temp_file_name, "en", "UTC", "en").unwrap();
let metadata = &model.workbook.metadata;
assert_eq!(metadata.application, "IronCalc Sheets");
// FIXME: This will need to be updated once we fix versioning
@@ -142,7 +142,7 @@ fn test_save_to_xlsx() {
#[test]
fn test_freeze() {
// freeze has 3 frozen columns and 2 frozen rows
let model = load_from_xlsx("tests/freeze.xlsx", "en", "UTC")
let model = load_from_xlsx("tests/freeze.xlsx", "en", "UTC", "en")
.unwrap()
.workbook;
assert_eq!(model.worksheets[0].frozen_rows, 2);
@@ -152,7 +152,7 @@ fn test_freeze() {
#[test]
fn test_split() {
// We test that a workbook with split panes do not produce frozen rows and columns
let model = load_from_xlsx("tests/split.xlsx", "en", "UTC")
let model = load_from_xlsx("tests/split.xlsx", "en", "UTC", "en")
.unwrap()
.workbook;
assert_eq!(model.worksheets[0].frozen_rows, 0);
@@ -290,14 +290,14 @@ fn test_model_has_correct_styles(model: &Model) {
#[test]
fn test_simple_text() {
let model = load_from_xlsx("tests/basic_text.xlsx", "en", "UTC").unwrap();
let model = load_from_xlsx("tests/basic_text.xlsx", "en", "UTC", "en").unwrap();
test_model_has_correct_styles(&model);
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();
let model = load_from_xlsx(temp_file_name, "en", "UTC", "en").unwrap();
fs::remove_file(temp_file_name).unwrap();
test_model_has_correct_styles(&model);
}
@@ -305,10 +305,10 @@ fn test_simple_text() {
#[test]
fn test_defined_names_casing() {
let test_file_path = "tests/calc_tests/defined_names_for_unit_test.xlsx";
let loaded_workbook = load_from_xlsx(test_file_path, "en", "UTC")
let loaded_workbook = load_from_xlsx(test_file_path, "en", "UTC", "en")
.unwrap()
.workbook;
let mut model = Model::from_bytes(&bitcode::encode(&loaded_workbook)).unwrap();
let mut model = Model::from_bytes(&bitcode::encode(&loaded_workbook), "en").unwrap();
let (row, column) = (2, 13); // B13
let test_cases = [
@@ -455,7 +455,7 @@ fn test_exporting_merged_cells() {
let expected_merge_cell_ref = {
// loading the xlsx file containing merged cells
let example_file_name = "tests/example.xlsx";
let mut model = load_from_xlsx(example_file_name, "en", "UTC").unwrap();
let mut model = load_from_xlsx(example_file_name, "en", "UTC", "en").unwrap();
let expected_merge_cell_ref = model
.workbook
.worksheets
@@ -469,7 +469,7 @@ fn test_exporting_merged_cells() {
expected_merge_cell_ref
};
{
let mut temp_model = load_from_xlsx(temp_file_name, "en", "UTC").unwrap();
let mut temp_model = load_from_xlsx(temp_file_name, "en", "UTC", "en").unwrap();
{
// loading the previous file back and verifying whether
// merged cells got exported properly or not
@@ -496,7 +496,7 @@ fn test_exporting_merged_cells() {
.clear();
save_to_xlsx(&temp_model, temp_file_name).unwrap();
let temp_model2 = load_from_xlsx(temp_file_name, "en", "UTC").unwrap();
let temp_model2 = load_from_xlsx(temp_file_name, "en", "UTC", "en").unwrap();
let got_merge_cell_ref_cnt = &temp_model2
.workbook
.worksheets
@@ -599,7 +599,7 @@ fn test_documentation_xlsx() {
#[test]
fn test_user_model() {
let temp_file_name = "temp_file_test_user_model.xlsx";
let mut model = UserModel::new_empty("my_model", "en", "UTC").unwrap();
let mut model = UserModel::new_empty("my_model", "en", "UTC", "en").unwrap();
model.set_user_input(0, 1, 1, "=1+1").unwrap();
// test we can use `get_model` to save the model
@@ -627,7 +627,7 @@ fn test_user_model() {
// wb.save('openpyxl_example.xlsx')
#[test]
fn test_pyopenxl_example() {
let mut model = load_from_xlsx("tests/openpyxl_example.xlsx", "en", "UTC").unwrap();
let mut model = load_from_xlsx("tests/openpyxl_example.xlsx", "en", "UTC", "en").unwrap();
model.evaluate();
let a1 = model.get_formatted_cell_value(0, 1, 1).unwrap();