#[path = "fixtures/mod.rs"]
mod fixtures;
use fixtures::complex;
use std::io::Cursor;
use std::sync::Arc;
use xlsxparser::{parse_workbook_reader, CellRef, CellValue, SheetVisibility};
#[test]
fn houganshi_merged_region_resolves_every_coordinate_to_the_anchor() {
let workbook = parse_workbook_reader(Cursor::new(complex::houganshi_merged())).unwrap();
let sheet = &workbook.sheets()[0];
let anchor = sheet.get(CellRef { row: 1, col: 1 }).unwrap();
assert_eq!(anchor.value, Some(CellValue::Text(Arc::from("houganshi"))));
for row in 1..=3 {
for col in 1..=3 {
assert_eq!(
sheet.get(CellRef { row, col }),
sheet.get(CellRef { row: 1, col: 1 }),
"coordinate ({row}, {col}) did not resolve to the merge anchor"
);
}
}
let json = xlsxparser::to_json_string(&workbook).unwrap();
let parsed: serde_json::Value = serde_json::from_str(&json).unwrap();
let cells = parsed["sheets"][0]["cells"].as_array().unwrap();
assert_eq!(cells.len(), 1);
assert_eq!(cells[0]["rowSpan"], 3);
assert_eq!(cells[0]["colSpan"], 3);
}
#[test]
fn multi_sheet_states_are_all_enumerated_including_hidden_and_empty() {
let workbook = parse_workbook_reader(Cursor::new(complex::multi_sheet_states())).unwrap();
let sheets = workbook.sheets();
assert_eq!(sheets.len(), 4);
let by_name: std::collections::HashMap<&str, &xlsxparser::Sheet> =
sheets.iter().map(|s| (s.name.as_str(), s)).collect();
assert_eq!(by_name["Visible"].visibility, SheetVisibility::Visible);
assert_eq!(by_name["Hidden"].visibility, SheetVisibility::Hidden);
assert_eq!(
by_name["VeryHidden"].visibility,
SheetVisibility::VeryHidden
);
assert_eq!(by_name["Empty"].visibility, SheetVisibility::Visible);
assert_eq!(by_name["Empty"].iter_cells().count(), 0);
let json = xlsxparser::to_json_string(&workbook).unwrap();
let parsed: serde_json::Value = serde_json::from_str(&json).unwrap();
assert_eq!(parsed["sheets"].as_array().unwrap().len(), 4);
}
#[test]
fn extreme_sparse_coordinates_register_only_the_populated_cells() {
let workbook = parse_workbook_reader(Cursor::new(complex::extreme_sparse())).unwrap();
let sheet = &workbook.sheets()[0];
assert_eq!(
sheet.get(CellRef { row: 1, col: 1 }).unwrap().value,
Some(CellValue::Number(1.0))
);
assert_eq!(
sheet
.get(CellRef {
row: 1_048_576,
col: 16_384
})
.unwrap()
.value,
Some(CellValue::Number(2.0))
);
assert_eq!(sheet.iter_cells().count(), 2);
}