use std::fs;
use std::fs::File;
use std::io::BufReader;
use lib_test::*;
use spreadsheet_ods::defaultstyles::DefaultFormat;
use spreadsheet_ods::sheet::Visibility;
use spreadsheet_ods::{read_ods, CellStyle, OdsError, OdsOptions, Sheet, Value, WorkBook};
mod lib_test;
#[test]
fn test_write_first() -> Result<(), OdsError> {
let mut wb = WorkBook::new_empty();
let mut sh = Sheet::new("Sheet1");
sh.set_value(0, 0, 1);
wb.push_sheet(sh);
test_write_ods(&mut wb, "test_out/test_core_writing_loop_1.ods")?;
let wb = read_ods("test_out/test_core_writing_loop_1.ods")?;
let sh = wb.sheet(0);
assert_eq!(sh.value(0, 0).as_i32_or(0), 1);
Ok(())
}
#[test]
fn test_write_empty_before() -> Result<(), OdsError> {
let mut wb = WorkBook::new_empty();
let mut sh = Sheet::new("Sheet1");
sh.set_value(5, 0, 1);
wb.push_sheet(sh);
test_write_ods(&mut wb, "test_out/test_core_writing_loop_2.ods")?;
let wb = read_ods("test_out/test_core_writing_loop_2.ods")?;
let sh = wb.sheet(0);
assert_eq!(sh.value(5, 0).as_i32_or(0), 1);
Ok(())
}
#[test]
fn test_write_simple() -> Result<(), OdsError> {
let mut wb = WorkBook::new_empty();
let mut sh = Sheet::new("Sheet1");
sh.set_value(4, 0, 1);
sh.set_value(5, 0, 1);
wb.push_sheet(sh);
test_write_ods(&mut wb, "test_out/test_core_writing_loop_3.ods")?;
let wb = read_ods("test_out/test_core_writing_loop_3.ods")?;
let sh = wb.sheet(0);
assert_eq!(sh.value(4, 0).as_i32_or(0), 1);
assert_eq!(sh.value(5, 0).as_i32_or(0), 1);
Ok(())
}
#[test]
fn test_write_gap() -> Result<(), OdsError> {
let mut wb = WorkBook::new_empty();
let mut sh = Sheet::new("Sheet1");
sh.set_value(2, 0, 1);
sh.set_value(5, 0, 1);
wb.push_sheet(sh);
test_write_ods(&mut wb, "test_out/test_core_writing_loop_4.ods")?;
let wb = read_ods("test_out/test_core_writing_loop_4.ods")?;
let sh = wb.sheet(0);
assert_eq!(sh.value(2, 0).as_i32_or(0), 1);
assert_eq!(sh.value(5, 0).as_i32_or(0), 1);
Ok(())
}
#[test]
fn test_write_gap_repeat() -> Result<(), OdsError> {
let mut wb = WorkBook::new_empty();
let mut sh = Sheet::new("Sheet1");
sh.set_value(2, 0, 1);
sh.set_row_repeat(2, 2);
sh.set_value(5, 0, 1);
wb.push_sheet(sh);
test_write_ods(&mut wb, "test_out/test_core_writing_loop_5.ods")?;
let wb = read_ods("test_out/test_core_writing_loop_5.ods")?;
let sh = wb.sheet(0);
assert_eq!(sh.value(2, 0).as_i32_or(0), 1);
assert_eq!(sh.value(5, 0).as_i32_or(0), 1);
Ok(())
}
#[test]
#[should_panic]
fn test_write_row_overlap() {
let mut wb = WorkBook::new_empty();
let mut sh = Sheet::new("Sheet1");
sh.set_value(2, 0, 1);
sh.set_row_repeat(2, 2);
sh.set_value(3, 0, 1);
wb.push_sheet(sh);
match test_write_ods(&mut wb, "test_out/test_core_writing_loop_6.ods") {
Ok(_) => {}
Err(_) => {
let _ = fs::remove_file("test_out/test_core_writing_loop_6.ods");
panic!();
}
}
}
#[test]
#[should_panic]
fn test_write_col_overlap() {
let mut wb = WorkBook::new_empty();
let mut sh = Sheet::new("Sheet1");
sh.set_value(3, 0, 100);
sh.set_cell_repeat(3, 0, 5);
sh.set_value(3, 4, 101);
wb.push_sheet(sh);
match test_write_ods(&mut wb, "test_out/test_core_writing_loop_7.ods") {
Ok(_) => {}
Err(_) => {
let _ = fs::remove_file("test_out/test_core_writing_loop_7.ods");
panic!();
}
}
}
#[test]
fn test_write_repeat() -> Result<(), OdsError> {
let mut wb = WorkBook::new_empty();
let mut sh = Sheet::new("Sheet1");
sh.set_value(9, 9, "X");
sh.set_value(2, 0, 100);
sh.set_cell_repeat(2, 0, 5);
sh.set_value(3, 0, 100);
sh.set_cell_repeat(3, 0, 20);
sh.set_value(4, 0, 100);
sh.set_cell_repeat(4, 0, 5);
sh.set_value(4, 5, 101);
sh.set_value(5, 1, "V");
sh.set_col_span(5, 1, 2);
sh.set_row_span(5, 1, 2);
sh.set_value(6, 0, 100);
sh.set_cell_repeat(6, 0, 5);
sh.set_value(6, 5, 101);
wb.push_sheet(sh);
test_write_ods(&mut wb, "test_out/test_core_writing_loop_8.ods")?;
let read = BufReader::new(File::open("test_out/test_core_writing_loop_8.ods")?);
let wb = OdsOptions::default()
.use_repeat_for_cells()
.read_ods(read)?;
let sh = wb.sheet(0);
assert_eq!(sh.value(9, 9).as_str_or(""), "X");
assert_eq!(sh.value(2, 0).as_u32_or(0), 100);
assert_eq!(sh.cell_repeat(2, 0), 5);
assert_eq!(sh.value(4, 5).as_u32_or(0), 101);
assert_eq!(sh.value(6, 0).as_u32_or(0), 100);
assert_eq!(sh.cell_repeat(6, 0), 1);
assert_eq!(sh.value(6, 1).as_u32_or(0), 100);
assert_eq!(sh.cell_repeat(6, 1), 2);
assert_eq!(sh.value(6, 3).as_u32_or(0), 100);
assert_eq!(sh.cell_repeat(6, 3), 2);
assert_eq!(sh.value(6, 5).as_u32_or(0), 101);
assert_eq!(sh.cell_repeat(6, 5), 1);
Ok(())
}
#[test]
fn test_row_repeat() -> Result<(), OdsError> {
let mut wb = WorkBook::new_empty();
let mut sh = Sheet::new("Sheet1");
sh.set_value(2, 0, 1);
sh.set_row_repeat(2, 2);
sh.set_value(5, 0, 1);
sh.set_value(5, 1, Value::Empty);
sh.set_row_repeat(5, 5);
wb.push_sheet(sh);
test_write_ods(&mut wb, "test_out/test_core_writing_loop_9.ods")?;
let f = BufReader::new(File::open("test_out/test_core_writing_loop_9.ods")?);
let wb = OdsOptions::default().use_repeat_for_cells().read_ods(f)?;
let sh = wb.sheet(0);
assert_eq!(sh.row_repeat(2), 2);
assert_eq!(sh.row_repeat(5), 5);
Ok(())
}
#[test]
fn test_void() -> Result<(), OdsError> {
let mut wb = WorkBook::new_empty();
let mut s_0 = CellStyle::new("", &DefaultFormat::number());
s_0.set_font_bold();
let s_0 = wb.add_cellstyle(s_0);
let mut sh = Sheet::new("Sheet1");
sh.set_value(1, 0, Value::Empty);
sh.set_col_cellstyle(1, &s_0);
sh.set_styled(1, 1, "text", &s_0);
sh.set_cellstyle(2, 1, &s_0);
wb.push_sheet(sh);
test_write_ods(&mut wb, "test_out/test_core_writing_loop_10.ods")?;
let f = BufReader::new(File::open("test_out/test_core_writing_loop_10.ods")?);
let wb = OdsOptions::default().use_repeat_for_cells().read_ods(f)?;
let sh = wb.sheet(0);
assert!(sh.cell_ref(1, 0).is_none());
assert!(sh.cell_ref(2, 1).is_none());
Ok(())
}
#[test]
fn test_header_span() -> Result<(), OdsError> {
let mut sh = Sheet::new("Sheet1");
sh.set_row_visible(0, Visibility::Collapsed);
sh._set_row_header_span(0, 10);
assert_eq!(sh.row_visible(0), Visibility::Collapsed);
assert_eq!(sh.row_visible(9), Visibility::Collapsed);
sh.set_row_visible(0, Visibility::Filtered);
assert_eq!(sh.row_visible(0), Visibility::Filtered);
assert_eq!(sh.row_visible(1), Visibility::Collapsed);
assert_eq!(sh.row_visible(9), Visibility::Collapsed);
assert_eq!(sh.row_visible(10), Visibility::default());
sh.set_row_visible(5, Visibility::Filtered);
assert_eq!(sh.row_visible(0), Visibility::Filtered);
assert_eq!(sh.row_visible(1), Visibility::Collapsed);
assert_eq!(sh.row_visible(5), Visibility::Filtered);
assert_eq!(sh.row_visible(9), Visibility::Collapsed);
assert_eq!(sh.row_visible(10), Visibility::default());
sh.set_row_visible(9, Visibility::Filtered);
assert_eq!(sh.row_visible(0), Visibility::Filtered);
assert_eq!(sh.row_visible(1), Visibility::Collapsed);
assert_eq!(sh.row_visible(5), Visibility::Filtered);
assert_eq!(sh.row_visible(8), Visibility::Collapsed);
assert_eq!(sh.row_visible(9), Visibility::Filtered);
assert_eq!(sh.row_visible(10), Visibility::default());
Ok(())
}