From c1d4d892ad62f8d156883a840fd2872d2ead8900 Mon Sep 17 00:00:00 2001 From: John McNamara Date: Mon, 22 Jul 2024 20:31:33 +0100 Subject: [PATCH] note: add more test cases --- src/button.rs | 1 + src/comment.rs | 28 +++---- src/format.rs | 12 +++ src/note.rs | 114 +++++++++++++++++++++++++++- src/packager.rs | 13 ++-- src/vml.rs | 40 +++++++--- src/worksheet.rs | 21 +++++ tests/input/button08.xlsx | Bin 0 -> 10097 bytes tests/input/button09.xlsx | Bin 0 -> 10097 bytes tests/input/button10.xlsx | Bin 0 -> 12010 bytes tests/input/button11.xlsx | Bin 0 -> 12018 bytes tests/input/button12.xlsx | Bin 0 -> 11163 bytes tests/input/comment06.xlsx | Bin 0 -> 8693 bytes tests/input/comment07.xlsx | Bin 0 -> 8663 bytes tests/input/comment08.xlsx | Bin 0 -> 8693 bytes tests/input/comment10.xlsx | Bin 0 -> 8846 bytes tests/input/comment11.xlsx | Bin 0 -> 9258 bytes tests/input/comment12.xlsx | Bin 0 -> 8877 bytes tests/input/comment13.xlsx | Bin 0 -> 8835 bytes tests/input/comment14.xlsx | Bin 0 -> 8886 bytes tests/input/comment15.xlsx | Bin 0 -> 8870 bytes tests/input/comment16.xlsx | Bin 0 -> 9085 bytes tests/input/header_image08.xlsx | Bin 0 -> 10782 bytes tests/input/header_image09.xlsx | Bin 0 -> 11597 bytes tests/input/header_image10.xlsx | Bin 11643 -> 11598 bytes tests/input/table04.xlsx | Bin 0 -> 9513 bytes tests/input/table05.xlsx | Bin 9717 -> 10802 bytes tests/input/table06.xlsx | Bin 0 -> 11718 bytes tests/input/vml01.xlsx | Bin 0 -> 9162 bytes tests/input/vml02.xlsx | Bin 0 -> 9289 bytes tests/input/vml03.xlsx | Bin 0 -> 12016 bytes tests/input/vml04.xlsx | Bin 0 -> 73210 bytes tests/integration/button04.rs | 2 + tests/integration/button08.rs | 42 ++++++++++ tests/integration/button09.rs | 42 ++++++++++ tests/integration/button10.rs | 49 ++++++++++++ tests/integration/button11.rs | 49 ++++++++++++ tests/integration/button12.rs | 49 ++++++++++++ tests/integration/comment06.rs | 47 ++++++++++++ tests/integration/comment07.rs | 49 ++++++++++++ tests/integration/comment08.rs | 49 ++++++++++++ tests/integration/comment10.rs | 72 ++++++++++++++++++ tests/integration/comment11.rs | 38 ++++++++++ tests/integration/comment12.rs | 40 ++++++++++ tests/integration/comment13.rs | 79 +++++++++++++++++++ tests/integration/comment14.rs | 39 ++++++++++ tests/integration/comment15.rs | 39 ++++++++++ tests/integration/comment16.rs | 43 +++++++++++ tests/integration/header_image08.rs | 42 ++++++++++ tests/integration/header_image09.rs | 48 ++++++++++++ tests/integration/header_image10.rs | 48 ++++++++++++ tests/integration/main.rs | 24 ++++++ tests/integration/table04.rs | 52 +++++++++++++ tests/integration/table05.rs | 15 +++- tests/integration/table06.rs | 61 +++++++++++++++ tests/integration/vml01.rs | 40 ++++++++++ tests/integration/vml02.rs | 44 +++++++++++ tests/integration/vml03.rs | 57 ++++++++++++++ tests/integration/vml04.rs | 60 +++++++++++++++ 59 files changed, 1413 insertions(+), 35 deletions(-) create mode 100644 tests/input/button08.xlsx create mode 100644 tests/input/button09.xlsx create mode 100644 tests/input/button10.xlsx create mode 100644 tests/input/button11.xlsx create mode 100644 tests/input/button12.xlsx create mode 100644 tests/input/comment06.xlsx create mode 100644 tests/input/comment07.xlsx create mode 100644 tests/input/comment08.xlsx create mode 100644 tests/input/comment10.xlsx create mode 100644 tests/input/comment11.xlsx create mode 100644 tests/input/comment12.xlsx create mode 100644 tests/input/comment13.xlsx create mode 100644 tests/input/comment14.xlsx create mode 100644 tests/input/comment15.xlsx create mode 100644 tests/input/comment16.xlsx create mode 100644 tests/input/header_image08.xlsx create mode 100644 tests/input/header_image09.xlsx create mode 100644 tests/input/table04.xlsx create mode 100644 tests/input/table06.xlsx create mode 100644 tests/input/vml01.xlsx create mode 100644 tests/input/vml02.xlsx create mode 100644 tests/input/vml03.xlsx create mode 100644 tests/input/vml04.xlsx create mode 100644 tests/integration/button08.rs create mode 100644 tests/integration/button09.rs create mode 100644 tests/integration/button10.rs create mode 100644 tests/integration/button11.rs create mode 100644 tests/integration/button12.rs create mode 100644 tests/integration/comment06.rs create mode 100644 tests/integration/comment07.rs create mode 100644 tests/integration/comment08.rs create mode 100644 tests/integration/comment10.rs create mode 100644 tests/integration/comment11.rs create mode 100644 tests/integration/comment12.rs create mode 100644 tests/integration/comment13.rs create mode 100644 tests/integration/comment14.rs create mode 100644 tests/integration/comment15.rs create mode 100644 tests/integration/comment16.rs create mode 100644 tests/integration/header_image08.rs create mode 100644 tests/integration/header_image09.rs create mode 100644 tests/integration/header_image10.rs create mode 100644 tests/integration/table04.rs create mode 100644 tests/integration/table06.rs create mode 100644 tests/integration/vml01.rs create mode 100644 tests/integration/vml02.rs create mode 100644 tests/integration/vml03.rs create mode 100644 tests/integration/vml04.rs diff --git a/src/button.rs b/src/button.rs index 5afc68f4..9f735ef7 100644 --- a/src/button.rs +++ b/src/button.rs @@ -308,6 +308,7 @@ impl Button { text: self.name.clone(), alt_text: self.alt_text.clone(), macro_name: self.macro_name.clone(), + fill_color: "buttonFace [67]".to_string(), ..Default::default() } } diff --git a/src/comment.rs b/src/comment.rs index 0856eb4f..f02b7e5c 100644 --- a/src/comment.rs +++ b/src/comment.rs @@ -114,48 +114,48 @@ impl Comment { self.writer.xml_start_tag("comment", &attributes); // Write the text element. - self.write_text_block(¬e.text); + self.write_text_block(note); self.writer.xml_end_tag("comment"); } // Write the element. - fn write_text_block(&mut self, text: &str) { + fn write_text_block(&mut self, note: &Note) { self.writer.xml_start_tag_only("text"); self.writer.xml_start_tag_only("r"); // Write the rPr element. - self.write_paragraph_run(); + self.write_paragraph_run(note); // Write the t text element. - self.write_text(text); + self.write_text(¬e.text); self.writer.xml_end_tag("r"); self.writer.xml_end_tag("text"); } // Write the element. - fn write_paragraph_run(&mut self) { + fn write_paragraph_run(&mut self, note: &Note) { self.writer.xml_start_tag_only("rPr"); // Write the sz element. - self.write_font_size(); + self.write_font_size(note); // Write the color element. self.write_font_color(); // Write the rFont element. - self.write_font_name(); + self.write_font_name(note); // Write the family element. - self.write_font_family(); + self.write_font_family(note); self.writer.xml_end_tag("rPr"); } // Write the element. - fn write_font_size(&mut self) { - let attributes = [("val", "8".to_string())]; + fn write_font_size(&mut self, note: &Note) { + let attributes = [("val", note.format.font.size.to_string())]; self.writer.xml_empty_tag("sz", &attributes); } @@ -168,15 +168,15 @@ impl Comment { } // Write the element. - fn write_font_name(&mut self) { - let attributes = [("val", "Tahoma".to_string())]; + fn write_font_name(&mut self, note: &Note) { + let attributes = [("val", note.format.font.name.clone())]; self.writer.xml_empty_tag("rFont", &attributes); } // Write the element. - fn write_font_family(&mut self) { - let attributes = [("val", "2".to_string())]; + fn write_font_family(&mut self, note: &Note) { + let attributes = [("val", note.format.font.family.to_string())]; self.writer.xml_empty_tag("family", &attributes); } diff --git a/src/format.rs b/src/format.rs index 8aca6b12..67236e51 100644 --- a/src/format.rs +++ b/src/format.rs @@ -2560,6 +2560,18 @@ impl Color { } } + // Get the RGB hex value for a VML fill color in "#rrggbb" format. + pub(crate) fn vml_rgb_hex_value(self) -> String { + match self { + // Use Comment default color for non RGB colors. + Color::Theme(_, _) | Color::Default | Color::Automatic => "#ffffe1".to_string(), + _ => { + let rgb_color = Self::rgb_hex_value(self).to_lowercase(); + format!("#{rgb_color}") + } + } + } + // Get the ARGB hex value for a color. The alpha channel is always FF. pub(crate) fn argb_hex_value(self) -> String { format!("FF{}", self.rgb_hex_value()) diff --git a/src/note.rs b/src/note.rs index 6bb489d7..62e401f5 100644 --- a/src/note.rs +++ b/src/note.rs @@ -8,7 +8,7 @@ use crate::drawing::{DrawingObject, DrawingType}; use crate::vml::VmlInfo; -use crate::{ColNum, ObjectMovement, RowNum, COL_MAX, ROW_MAX}; +use crate::{ColNum, Format, IntoColor, ObjectMovement, RowNum, COL_MAX, ROW_MAX}; #[derive(Clone)] /// The `Note` struct represents an worksheet note object. @@ -31,6 +31,8 @@ pub struct Note { pub(crate) alt_text: String, pub(crate) object_movement: ObjectMovement, pub(crate) decorative: bool, + pub(crate) is_visible: Option, + pub(crate) format: Format, } impl Note { @@ -41,6 +43,11 @@ impl Note { /// Create a new Note object to represent an Excel Form Control note. /// pub fn new(text: impl Into) -> Note { + let format = Format::new() + .set_background_color("#FFFFE1") + .set_font_name("Tahoma") + .set_font_size(8); + Note { row: None, col: None, @@ -58,6 +65,8 @@ impl Note { alt_text: String::new(), object_movement: ObjectMovement::DontMoveOrSizeWithCells, decorative: false, + is_visible: None, + format, } } @@ -107,6 +116,107 @@ impl Note { self } + /// TODO + /// + /// # Parameters + /// + /// - `todo`: + /// + pub fn set_visible(mut self, enable: bool) -> Note { + self.is_visible = Some(enable); + self + } + + /// Set the TODO pattern background color property. + /// + /// + /// # Parameters + /// + /// - `color`: The background color property defined by a + /// [`Color`](crate::Color) enum value or a type that implements the + /// [`IntoColor`] trait. + /// + pub fn set_background_color(mut self, color: T) -> Note + where + T: IntoColor, + { + let color = color.new_color(); + if color.is_valid() { + self.format.fill.background_color = color; + } + + self + } + + /// Set the Format font name property. TODO + /// + /// Set the font for a cell format. Excel can only display fonts that are + /// installed on the system that it is running on. Therefore it is generally + /// best to use standard Excel fonts. + /// + /// # Parameters + /// + /// - `font_name`: The font name property. + /// + pub fn set_font_name(mut self, font_name: impl Into) -> Note { + self.format.font.name = font_name.into(); + + if self.format.font.name != "Calibri" { + self.format.font.scheme = String::new(); + } + + self + } + + /// Set the Format font size property. TODO + /// + /// Set the font size of the cell format. The size is generally an integer + /// value but Excel allows x.5 values (hence the property is a f64 or + /// types that can convert [`Into`] a f64). + /// + /// Excel adjusts the height of a row to accommodate the largest font size + /// in the row. + /// + /// # Parameters + /// + /// - `font_size`: The font size property. + /// + pub fn set_font_size(mut self, font_size: T) -> Note + where + T: Into, + { + self.format.font.size = font_size.into().to_string(); + self + } + + /// Set the Format font family property. TODO. + /// + /// Set the font family. This is usually an integer in the range 1-4. This + /// function is implemented for completeness but is rarely used in practice. + /// + /// # Parameters + /// + /// - `font_family`: The font family property. + /// + pub fn set_font_family(mut self, font_family: u8) -> Note { + self.format.font.family = font_family; + self + } + + /// Set the [`Format`] of the conditional format rule. + /// + /// Set the [`Format`] todo. + /// + /// + /// # Parameters + /// + /// - `format`: The [`Format`] property for the cell Note. + /// + pub fn set_format(mut self, format: impl Into) -> Note { + self.format = format.into(); + self + } + /// Set the alt text for the note to help accessibility. /// /// The alt text is used with screen readers to help people with visual @@ -167,6 +277,8 @@ impl Note { height: self.height, text: self.text.clone(), alt_text: self.alt_text.clone(), + is_visible: self.is_visible.unwrap_or(false), + fill_color: self.format.fill.background_color.vml_rgb_hex_value(), ..Default::default() } } diff --git a/src/packager.rs b/src/packager.rs index e226d0fa..7cc90279 100644 --- a/src/packager.rs +++ b/src/packager.rs @@ -164,17 +164,12 @@ impl Packager { self.write_vba_project(workbook)?; let mut image_index = 1; - let mut vml_index = 1; for worksheet in &mut workbook.worksheets { if !worksheet.drawing_relationships.is_empty() { self.write_drawing_rels_file(&worksheet.drawing_relationships, image_index)?; image_index += 1; } - if !worksheet.vml_drawing_relationships.is_empty() { - self.write_vml_drawing_rels_file(&worksheet.vml_drawing_relationships, vml_index)?; - vml_index += 1; - } } if options.has_metadata { @@ -445,7 +440,7 @@ impl Packager { pub(crate) fn write_vml_drawing_rels_file( &mut self, relationships: &[(String, String, String)], - index: usize, + index: u32, ) -> Result<(), XlsxError> { let mut rels = Relationship::new(); @@ -792,12 +787,16 @@ impl Packager { .append(&mut worksheet.header_footer_vml_info); vml.data_id = format!("{header_data_id}"); + vml.shape_id = 1024 * header_data_id; header_data_id += 1; - vml.shape_id = 1024 * index; vml.assemble_xml_file(); self.zip.write_all(vml.writer.xmlfile.get_ref())?; + + // The rels file index must match the vmlDrawing file index. + self.write_vml_drawing_rels_file(&worksheet.vml_drawing_relationships, index)?; + index += 1; } } diff --git a/src/vml.rs b/src/vml.rs index 1277ee5d..c6f4b743 100644 --- a/src/vml.rs +++ b/src/vml.rs @@ -48,6 +48,8 @@ impl Vml { // Assemble and write the XML file. pub fn assemble_xml_file(&mut self) { + let mut z_index = 0; + // Write the xml element. self.write_xml_namespace(); @@ -58,11 +60,12 @@ impl Vml { // Write the v:shapetype element. self.write_button_shapetype(); - for (z_index, vml_info) in self.buttons.clone().iter().enumerate() { + for vml_info in &self.buttons.clone() { self.shape_id += 1; + z_index += 1; // Write the v:shape element. - self.write_button_shape(self.shape_id, z_index + 1, vml_info); + self.write_button_shape(self.shape_id, z_index, vml_info); } } @@ -70,11 +73,12 @@ impl Vml { // Write the v:shapetype element. self.write_comment_shapetype(); - for (z_index, vml_info) in self.comments.clone().iter().enumerate() { + for vml_info in &self.comments.clone() { self.shape_id += 1; + z_index += 1; // Write the v:shape element. - self.write_comment_shape(self.shape_id, z_index + 1, vml_info); + self.write_comment_shape(self.shape_id, z_index, vml_info); } } @@ -286,7 +290,7 @@ impl Vml { // Write the element for buttons. #[allow(clippy::cast_precision_loss)] - fn write_button_shape(&mut self, vml_shape_id: u32, z_index: usize, vml_info: &VmlInfo) { + fn write_button_shape(&mut self, vml_shape_id: u32, z_index: u32, vml_info: &VmlInfo) { let top = Self::vml_dpi_size(vml_info.drawing_info.row_absolute as f64); let left = Self::vml_dpi_size(vml_info.drawing_info.col_absolute as f64); let width = Self::vml_dpi_size(vml_info.drawing_info.width); @@ -312,7 +316,7 @@ impl Vml { attributes.push(("style", style)); attributes.push(("o:button", "t".to_string())); - attributes.push(("fillcolor", "buttonFace [67]".to_string())); + attributes.push(("fillcolor", vml_info.fill_color.clone())); attributes.push(("strokecolor", "windowText [64]".to_string())); attributes.push(("o:insetmode", "auto".to_string())); @@ -335,22 +339,27 @@ impl Vml { // Write the element for comments. #[allow(clippy::cast_precision_loss)] - fn write_comment_shape(&mut self, vml_shape_id: u32, z_index: usize, vml_info: &VmlInfo) { + fn write_comment_shape(&mut self, vml_shape_id: u32, z_index: u32, vml_info: &VmlInfo) { let top = Self::vml_dpi_size(vml_info.drawing_info.row_absolute as f64); let left = Self::vml_dpi_size(vml_info.drawing_info.col_absolute as f64); let width = Self::vml_dpi_size(vml_info.drawing_info.width); let height = Self::vml_dpi_size(vml_info.drawing_info.height); - let style = format!( + let mut style = format!( "position:absolute;\ margin-left:{left}pt;\ margin-top:{top}pt;\ width:{width}pt;\ height:{height}pt;\ - z-index:{z_index};\ - visibility:hidden" + z-index:{z_index};" ); + if vml_info.is_visible { + style += "visibility:visible"; + } else { + style += "visibility:hidden"; + } + let shape_id = format!("_x0000_s{vml_shape_id}"); let mut attributes = vec![("id", shape_id), ("type", "#_x0000_t202".to_string())]; @@ -360,7 +369,7 @@ impl Vml { } attributes.push(("style", style)); - attributes.push(("fillcolor", "#ffffe1".to_string())); + attributes.push(("fillcolor", vml_info.fill_color.clone())); attributes.push(("o:insetmode", "auto".to_string())); self.writer.xml_start_tag("v:shape", &attributes); @@ -559,6 +568,11 @@ impl Vml { // Write the x:Column element. self.write_column(vml_info.col); + // Write the element. + if vml_info.is_visible { + self.writer.xml_empty_tag_only("x:Visible"); + } + self.writer.xml_end_tag("x:ClientData"); } @@ -640,6 +654,8 @@ pub(crate) struct VmlInfo { pub(crate) header_position: String, pub(crate) is_scaled: bool, pub(crate) drawing_info: DrawingInfo, + pub(crate) is_visible: bool, + pub(crate) fill_color: String, } impl Default for VmlInfo { @@ -656,6 +672,8 @@ impl Default for VmlInfo { header_position: String::new(), is_scaled: false, drawing_info: DrawingInfo::default(), + is_visible: false, + fill_color: String::new(), } } } diff --git a/src/worksheet.rs b/src/worksheet.rs index a727ebd7..1cc6583a 100644 --- a/src/worksheet.rs +++ b/src/worksheet.rs @@ -1285,6 +1285,7 @@ pub struct Worksheet { sparklines: Vec, embedded_image_ids: HashMap, default_note_author: String, + show_notes: bool, #[cfg(feature = "serde")] pub(crate) serializer_state: SerializerState, @@ -1489,6 +1490,7 @@ impl Worksheet { vba_codename: None, default_note_author: "Author".to_string(), note_authors: BTreeMap::new(), + show_notes: false, vml_data_id: String::new(), vml_shape_id: 0, @@ -5207,6 +5209,12 @@ impl Worksheet { self } + /// TODO. + pub fn show_notes(&mut self) -> &mut Worksheet { + self.show_notes = true; + self + } + /// Add a Excel Form Control button object to a worksheet. /// /// Add a [`Button`] to a worksheet at a cell location. The worksheet button @@ -12703,12 +12711,25 @@ impl Worksheet { let mut button_id = 1; let mut note_count = 0; + // TODO + for columns in self.notes.values_mut() { + for note in columns.values_mut() { + if self.show_notes && note.is_visible.is_none() { + note.is_visible = Some(true); + } + } + } + // Convert the Note objects to VmlInfo objects, along with their dimensions. for (cell_row, columns) in &self.notes.clone() { for (cell_col, note) in columns { let note_row = note.row(); let note_col = note.col(); + // TODO + // self.format_xf_index + // self.get_cell_xf_index(xf_index, row_options, col_num) + let mut vml_info = note.vml_info(); vml_info.drawing_info = self.position_object_pixels(note_row, note_col, note); vml_info.row = *cell_row; diff --git a/tests/input/button08.xlsx b/tests/input/button08.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..a87510742cf6b5b648c3dda4dc5fbf3621938ded GIT binary patch literal 10097 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 A*Z=?k literal 0 HcmV?d00001 diff --git a/tests/input/button10.xlsx b/tests/input/button10.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..dca6dcdfe445a7144209a93148ab332ed4483de2 GIT binary patch literal 12010 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 I{rv9#02C%ldH?_b literal 0 HcmV?d00001 diff --git a/tests/input/button11.xlsx b/tests/input/button11.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..4f5296c8ff7428397223239d1ef2ed469f1209de GIT binary patch literal 12018 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 literal 0 HcmV?d00001 diff --git a/tests/input/comment08.xlsx b/tests/input/comment08.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..92ee26b2d8dfccbb7f93cbfc643cd55f910f44e7 GIT binary patch literal 8693 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 D@dNTf literal 0 HcmV?d00001 diff --git a/tests/input/comment10.xlsx b/tests/input/comment10.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..2682ab6bfb9ba92975bf8390c87e095ccd1636b6 GIT binary patch literal 8846 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 literal 0 HcmV?d00001 diff --git a/tests/input/comment12.xlsx b/tests/input/comment12.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..5747b39ce0c854dd1bcacb172c090213c12ac96b GIT binary patch literal 8877 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 UfTH$$J&ys25&;DFJDak^uziZVBmb0YTu7 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 literal 0 HcmV?d00001 diff --git a/tests/input/comment14.xlsx b/tests/input/comment14.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..c04a7b06e349b2e8f30ccfcd10fa61e44c8ba7a9 GIT binary patch literal 8886 zcmeHN2RmGA*B%*N^csxbLUd80M36-9qKi(n!7xLVL>Ijigy)OwH?)5zPy4R>G08vQ*=m1Or06-5wR2AxZp#T7m zXaE2)UO9W@4^fSr&~gTr($8C%Tfqyu3WE4=-LBI$v7B zVzp$~M#M8xI8p>T{^+ShtLyuKg1O>uR5>GEiV_&i(whZT%%3tI2qE}PyvBx;k7|kV z$w-MmipMk4xyM#JbDWoQNG0u(zP3+184mj3MQ>Dms7} z$vmiJvOMtGQ8`f^Reb>V=)z2C+eS-X^@#(=VvkKpU2w}Fk*TmvGhB0B3^M>tGT#O9 zvZ@cF^QsuHyVr->TJhxVei_2MuP?vMfi`r+1Yf!dc9FJKJm;xf_pyp&_)QT}&NEk7 zz{}j~Jp_H8E*E%;3nS$w zWWrrt0RgIiNySPn9>yaiz7&y}h65NtdFpIo2jS-W@lBW6^WPNwk4e3-m_cOD-R#(v zt(RUt-*k}0%*d%zl&z!Jq-kc_p{)$hVv;;L_6PdPn@tZNuMOVUpWRt~rb$a}%B|d5 z%l4p@-_&Em#;rL03I1DC2CHWzos<#OCfYNzc2C{1<5El~&hyJcLn&+HzB8H%fK*6u z_P3mKqIuMMOst1vZ{=Hjj$08AY@$)+6dQ-zU}AV+6iS?leJiULPy)MguX>p#Du+p? z5sUUhSEMa*3I?b1lcjp){7Ap1juLjCGnfI>Sf&hA4zH?&ofs5e4av@b6`KozNPhX^ z!ws}7^@85mM_9{M-fc)g5LOewP`;#*2@ zY{8Gtq%8Yr)GC2#wo=sj$!60ax(icaK#Aacd z9G}phCZ`ryQ&>KeWvFvgpHEuKiZiE(1|g0AmxfaOWN!0d5kj zlvZPp%+C5+=O)Eoo#5F|Q+Z;qddUo0F)-~5EMo*e%EQxzM{@Boc75GXxw|A1i59t0 z9`{w(&@>-metL655-&QE`UP_gWR0P3CYfj1Me4lg_J`>M{e+dd?ylJIcmKRTT4`M# z$s%z;g2W6y5)4Sp{247_(LZ;xhbOY%{qA}s2gL+GQDUc;bn%N~+n#ER?I<*RT%|D8 zWR=Q}1}*CNy0`!N%gW~1?c)H1T$X~YB`?odC87GR!s(>g+zb$sW($uW)@iu~Dk_{# zSux&P7)=5)zJxMY%$|g@IlG2}VEm(5xyojCo#HuA+K;mgJW8=2`Jrp`Z~ z?kj$b|F}R(C=wD}_^wN+7gg|k{`bITC6@z^{*emISa?Wr8~nlm`?lzIHkl^;ut5I67QhPR)q8~xqY+E8dNG9xdCIn2zTlbq0qDXnKo8H`@KRN=^B z)RA?|CcPgw7|&+$cjD6S?HHN3D$hq#*M9#VHilvZ~ z$tlttE8(C&o97*FZQY*QRW_Dk40p1W!lxx!Z-Fk!jE!->3X*db(dTIO7m;tpQ8(N% za31S9C@CWe%Tf$Zw(_u^&g$nSO!CnlnL;a9fBxR>o2alH{Mq{JH{{`|b*{rBoq6xC}3S;_65o5&b~(hVuWVz}7Dceo|NC zaC41AGVbc!&2=(GS4Z>%c=3Zb?+c7BQ$Xk5W%ZHAGY~eI^4suBGC2!%ni`6sGmpv5 zO>DQPSr;nd<>@D{B{n0;8Fp-0PGhTU5kjm6-|Nm%|0ygRxy&`b=m3BQ)sGV3XI{Bj zTi9E0|NQ~(^UMyBM5oEO#9 z(o2-qT9ZVSx@{gij-eZMF6k`#LB+r`(qmcqGKyY>5p*iVc#sUk3(u>$B}UhyDZk(h zX$Gbhr|EZw@1F;^Nzjf8TYJC)FBGU~Vz4{S`rH(!W>aN%rx546hV3crOoR_gBob0; zwgcpuQ{qDoO(=SM#prqalxl)Ye6SR`V(1nW)%CCt19nDFC*C=#$)ri{kF*Y_aC zv1b*@c`HrrO$_J0kGO95?z{Bwk-*uk^uA2!YeSvS(3{8j-cNjS^{7luLouGiP%6Ij zF!|{6QE}|>otIlneA^C{YQ=S@H!hBtU+ce7&Ks7uD3!tOl0YQxQH@)AdGy1nqS}QL z_KpUi)zdC}=;r(V%$`^B?{s1N=p=lUDv3i=85iF2;z5eS)0_cdfM-^63prbGpjfRy zC|2Znp-$+Y7uOkJNHUN#JUW@x+}A63kt^bnuW3I3Ok|K$D&1&6IZ_{Wh^C}Dea-`q zBE)(AA??N0<~NPQ&2Ov+k#Pe?8bI zUvblIyEMvu0_Ap)e z1D%*z8J!wQTM0C*(C~bqSQ}~Bp!s4EON$yjr*N3IYbGFb+k z2wQ=;%`ajUo$$K120>ow#xHJ=CroM(!%iG5S1+ zx>i;evrpcimS{C;|6bZ{>iB5t#b8ogZ{l|)id}Gn(}xBs?0YVf6ptHtqs#32?NQFi zQoVuF4eYMxG%1g{)Y~3D=Oe9qlX%t_8Mzjfo)9rBHa2rtUXCBze5mxmUOAA8dqOKSAHvv z4gSvY3f@xZXSFZkqw{puZFYPH<~rf=<;zZ?frM?PA&E|YL#=y>SLsGfR=m=IKcAo~ zrjLS@vS}ed9N)c#oAD|LH6~jxGP< zUZ0I#K0oB$tzpFiNX-hnAAX{iAN+IjPypS!VRMg?aHcK7Q4k&$Rynhcp8B!fZGpj% zNm`7hAhKe%SEBG1t3|0P7myAr@0mU5o~KjXT%6P0h*DiHT+sEt(bsUbL1%K<%7b^sR>#0OwIM zg|KWKHB7b}vr9BEi0H@h5;Aac`Qrltp?6t1uJnL?&(*LeWnbXlMhMYST;9Fi9P!?^ z+g!?1%LQs8Gd<9ln-e!kLg?q{>Ho-%1&^oZX%PE5e=d;&tK!2UZpZlCV*A|Bi>WMz z`!{;$w}dU_f=8X-X$bV1;|RH@_8QM(FZwv-lu@k=dIhNGTC(Q(DEb?AL#0_}_0 zHVUnSGuoqjPp4_f*_TxVVxrExP{RERKm?qQAe>PGO~-V*OC0C?tLfBo0Y$ym0u|5@ z01Nv(8XJxNTs1-Q@QqYa!j54AlLFT3VD?}RVvgfrY9hh0yCnrDQ2YRb&D`W{i{^Rd zj`Z_1%OSQQC1u{ZRLYp$20@I=je$-Uezp~a$>@;z@!-QdpR~50my1n%godoYdYGa$ zSau_cw95BM^6`h;Eh5!=`lSg1Mz-cHKIDma1L5`b^7A7Y8~01D)E4;9out6|(%yhd zQg}7G(#;n1%(EDKu_&%6s3U54ET{sWEvGx0TO3=ZSEc*ZF)!t-xQQL-C*AK}%4Tc* zuX_i&+d~DQHYS}2s9jD0yqr~oB#`CPgAU;i&vABdx5cdU`E^juVmdFg5)a&p*(c+O zI!Wy1ay51TNO2Q#L;8F9z}4)K@`EJSAUO-}uPqDW;%;a0la6F-D1}b*5Hye<-^ZMR zkz&+lw;#}8`$)lV+hI5KB-r5`nq)hboPQB51Br6wBpMav?XNey7E-_D(~*A9F0&2F z`!wo9w8G9^X)Ao;ByvBE?G;@rNr!0rMm~erZ5oMX!be%N`Z+J@0zy-(05et{rsM1! zi?O?Lt@kVOp8y=BTTRL1qIf}Nfgt=KE6V_AMVIX^T};mjp0GHV4?|>Amlj14M^;f6 z2iTMD<)Ka&iBn6V$Wkaz?ag~R<1IG)0}E!@ilm(GPef_eqnNvO-9|<1`KILVvUP84 z;OB%|H;}#{)f3KRW~dgloFhRGsV4@o*YG=Z`Er{Daf-OOaoP7MbY4Zzpz>OFM#3;A znRJ$O@QGNTm-9=DuBk>-X#oXkT}E?BJ%i>(fNr6ZHp6bLH>IGWr2xA;^^W?yf~z9f zXK5t^@E}=ZroP*Ym{Or&&O45)DMGKV((G3+!FqgS9^U5l93I+->?$Lm#Y0X*4QXv` z_2a3RP>+@ZujRN_OE|p}K<3p4`q$-!Z;92%Gld*=UpUt;XfwNl?-%RN9gVljz&8S$ za^x%qN8^^xmP6+Lai%9rk2RH$gx?ZLU6B0b2kAF=Hi7-1p4?D-JDFeCyj;lZFip6_ zG|$Zj{K@;6oAimUzRmE1c^7I8W26#SS z^k9lPsU-e>_O@1PNB@JA?t|ji%qojel?RlEuD?-^QVp?-&*t!r~cW@>N{J4lJktTQXl*MKr ztBp~Qc6~mnvI=!u=k>fgL-b_jl+K=jYKW40*5G zMSC=;cC=n`U|Vm?b6|r!M%e&*UFpEc11$u_9)D@&K>T_M=W=@jt!$Pe6g~e@E5lLR zp1Gk6M3f@!&A#;GEU;ZX+{(wB$JTU4*ieFZjV11!tfn&7f;H=kXFMwi!Vzp`>(`JZ zRtV$@3vVn}!`YT?Kd^Ml_U{Vcj%ap^_zGRqs&J?pNK6Geek;=;-af6x ztK7|x)1_ZDF(_#;9vFGS@w{~lcbY%)*hDPQiY30lnma3Nf!xlfB}DfMNreBt-T+U^cwZscn_wgoDSn~wPnE;(njuVG0i4Q1(5SunqQsLs(vW$Y z!8qQA^lp%>7R|Oh;-+!?G2L_>(^aG2vnR#RH&9BfzBiyxoNL>*-SQe*rqs0zAXz7I zox%>av#Ve3Mom z(4~KW+2jDz@P=+IIArl&_1iZFx7e@lQ;(hKE%=OeXNGdTdJK%d2vSpdQ01EUu^N?# z=KRrY-1tOz-}JrPS3|-<_Yn*&`-HfK!61Ce5a!9~bqf)<&Ky&p)hlDLM#-*`%VcYJ z8%A0M6fgy#B5APFk`w6Zs1+`=YNUYB@%m0Ib%GjK% zMTpx+>22HeMJ~QKYPm9& z1PXC}owbEDycFaaw*A^wspcHD+Eu0P@lbuWsp>u<)^95LGFgFZlw+GOZV6~wSml09 zQg`27i3Pjz8c73d6rU^iwEI}H?^rf9yDTSZk9O;|9E_UfJ;j7BFYF z$M`a%Oi0$x=rlLk3Ng?8kWc=O^0?%xi^s?i=^{~1h!o|_!Dgz?U`GhI8Q9t4S10Jd zS{yQR0M8gTg;pMtfH|})>28mdiZ`_ZRls=hU?4nXQD1ha$}~2RX=-~e1!`EV=-DT} z=6&*6p=`wn0Vk)>zsvsENk$bAB9y5mFN;`W5dlt|v~j)YxFJ}UR1gT-9l7?CRh{i0h}#`?`z^bGmUCCy-RUJ|CnD;k*Y%gvBa#{w318ctnS6R-SYq}7ul0(RONtL?DO-`~ z9^>JrrIZ*-$jx-Gz(wRn{&)1T3Wv4@Bhg2Q<%CvX>d zj2E~Qo@z`HDEUM!8}xj#1Rz&e&N5o6s!Jq;kUc)kvd?y^eUnSvoql@sDy~)>+PF@i z6`DcR`|vh4rXYfgnti|G>iO4)B(f}H9i4!9VU!U4i+#VT)g-!D;GIbZV`ja~iUcBi zoHuZ^UY~fD)d7OMZ**p(!Z;_xjZgyF_dN&Y{)`XuGaBW3YNvRL~X_FCUt~57}?x!=Rf9Y z9jfZE7%R+k#ZNHh8oF35Etc8urMoE{zpeyjAuz+W*Wl}rptrc-UnRFg!Hi!HED#R- zI_thAv9U7Q40l~J=J6?U46lJLqr4E%kKLec>lNAW;@MXguJZxcLI#8+UW1>nHM}z9 zTWD+1KkN@6_mn?(17i*>)pHdZ+VYLn`;>bl-y_ZZ*snYH?gHTG;~LmR=kn`e>ydLM z+qW>$`x9~X-z_dM{)JwY8=Oc@^q)KF|C+6To&TY)uBz}?2Y>DV{mbyjITV=^f9eKa zH~ece<4XdwPfbv%odE{krjWq4>8k9rjP-zsbheJzSS(e|y;a z<>611>sK^>6R)4GqU#Q?3!A?k0&o6&rRy^1bqCkW%-;^Gh<=Uf-$mzj)9ZE1Z_~F( z8U6pLVy-*7PCb7+VnK@Be@x0B687(ST=#OF0sZ!}g5TC pfWOg%>*jx5+5c=FLj5Q6Kh}9w1vDgTf7JE3039UoWoduh{SV!JIFbMW literal 0 HcmV?d00001 diff --git a/tests/input/comment15.xlsx b/tests/input/comment15.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..a1ede13255c02d7f2537ddd553b34bf48bcba1d5 GIT binary patch literal 8870 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 YoL5suN22yeO9CIDjRZa+{g12v0h5)EKmY&$ literal 0 HcmV?d00001 diff --git a/tests/input/header_image08.xlsx b/tests/input/header_image08.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..5488f91e3feb4e1ab04632c16ad35a81bf98c5a8 GIT binary patch literal 10782 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 E0oae-3;+NC literal 0 HcmV?d00001 diff --git a/tests/input/header_image09.xlsx b/tests/input/header_image09.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..0e561d50dab277259850c641cf0ec4e133d2e8a0 GIT binary patch literal 11597 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 literal 0 HcmV?d00001 diff --git a/tests/input/header_image10.xlsx b/tests/input/header_image10.xlsx index 1cee71c3f8c9ffeca0b861c109a888e0bdcef346..77149855a4fce863d44aafa7e80935bfb42da99d 100644 GIT binary patch delta 1360 zcmV-W1+V)1TFzRqLktNyRiYez0RRAdlS~XDf5B?pKn%SH`VWKdS=$@Z1YAj8<#a9fn$ zwvaW|+WEJ`C4RV@G{`g2OG?~#HRS1O_Rrh9b&v-(9rkuV$s;Y_(G8=hYnLbXofX?u zOpDQJ3biiSj@?Z!2VR>*qnhAU5 z$~RYF_^4&Q3xyTE1oKQHG`~lq`j09i-&}y{iR3-d9*OrS%03ukr{1oX))0t=trIY# z;(tjK(=NCg^#34jj=1&%qC^u8wtd~PU37^ImrhOP`>t4hJ*`di1^@v6{{sL}llKk{ zlP4+=lNS&flU^zcvosE!2?@FYHotfQ003^2Obi;6k1GX#j8aW++b|5h57>VYc-XCx z+oIc$*)9qMX$ow>u&%o+7HtcaML}YkcE5hKvVNhLUIg-y?@@eGeSSZAb%!ZC3Jn}D zDo_|YvMvk_-27f2eFc@-1ZzA6Y~TSioVOo8)O$*|c|>F-3L!TzGRLLXxf^jZc|j3_ zRC-F2VM)_}pmR)UY#~ivpH$UnJsB6^ps-Bu(V)I}9j>U`O&ItflF%EL`{&Wc3~gu0>yuNfW((><(`*~_oltW{b%u`XTNV!VF(DeXT1009600{~D< z0|XS4`wj`StQo=y1>~?iI!Lo~BP0QTe3D;F!!Q)Z-vz%z$$Oim+nk2B1C>391Hp>o zTS)G!6uso@@EQfy zaV>dSX-Lr#ELvrk7m28us0=)rss`fm6g*or+UZX@r|UffoHMseq# zW`}DoKKKrBOvn{h;JD^Z4AY8Wy^}l>n3_QZQkFyUJt_)m|rf zQfQA?a_ct!&f5ay?Q!s&*FC31i`~OO20jSuW1p1Q+1-7M2(O=?#+)4keRWDG-x*DjEUolane_0`Cu#4-OlXFc1op4J#@E29r1| zCLFo|HotfQ003?R000;O000000000000000xfhdB3>A})D=z_OlfNrS0_q!+2`oSY z*&dU?D;SewEH42zlank#0RofNEF&A_usk|Q0RRA50ssIJ00000000000000004b9b SEj|ILlTs}s25Kk(0002~_Fw=2 delta 1357 zcmV-T1+x0iTKihCLktNz;^W+i0RRArlh79$e=;t3ZETEEO>5jh480ff9|qmKwzs5h zjO~!Hgyc{t&BuLW%k~g^G-$NzCcnNKFIiH0>0w~>GbmVI&HaQsd zEp^ThH9S7teEtq5iuIkH$YTw!7~!%x`&2E&FL6W^qYOUQFp7jS%VIm?Y~zLkdd>92 zf3p=0dB|d5wB1@XPuVulzh<*_9*ztp{|^WCy=!qt?S4itM-s-#it3M}3lW;CbDB#7 z8OFYbtD?N#Le^Ak=O>3t{BSpEkY}Qol(_3^$kWs8pSL&bAV1l3*xUUizi7EdH;kgL zouAluR%}x-Ek>s))Vg4kH$}NsU2Oude-zc4r1Q|^Rdtsbp86>k43Jjpqd2Rq;o z%Y*aLOxP<|zWD}*k6PBdP*~A(FwZ1H^LsR^|EMDJ%@;5|k-P`mBk|s&?1Kq5Am6(; z{q74e#7>=F4Xz;&3tJ~(M#bMq6VooZ8uT|I?UA_l1ERDO4z_*Wv0Zef43|zV3g)}6 zSY19XQS%3rVHp&Y`Y8~z2M)jq3DEEn*`)yh0NRt#7b1U;(=ZUdBk>K~-@yliwv_QAk^*dv zjj>%Rzkb=h&7=sVZKDUYP|8OL^0s>YsyL&62t5D^cCew8J(1fe73v;F9Tw=oGSi|T zHSyDTDmZ@+x|v1eppqy`)u@e?7l)1i9}jF>Q^OYP(+HL>CLRV&oPX$z3$iL2!`xJm z@X(g>eJoW~%wfM7IESmdAbmW*05w6w)k`r|bwqraKHf1DO;Yujb~jh`$%_VBeH!R9 zp7&t7p4jB(Ioei}X1UWH+-u(%8^i!D|A`jsC`*6SconagNs=vB>qH8F(f^YpbhB!e zMay`Vr%{^Zc@i(BI3f{_FOWUA8@R2};#!s5 z^oAQh_q&u1J$Y?Nik|T&WMbGlQ%WALoYsm=eTA^?C8gaQyDG40_H&Na8$G&rALsK! zp?)6Yh5A!5K&R`+t=DJX(EU#Mjo~r*yJjA;dfv+FC$nG~*9iqDk+_pSvpgdt0e_5= z%TB{E5JmS${6pk@;y9%gSxG7Z>H<*-i6Rg?%bvCo@k6#D?cd`(8iLA#rRUx`b7$my zd60GV1=dws6^JA$ia>EKDzz)n%VrhdpvZZq1go`z0v*AjWqEm#b3?hd@MN_C>nm_k zASp+=DbU_~Los%I50begI8+d~+J8#s!_)4tVf=&b0B31>jU{*{m}j^J#%3g<0V(*1 zG@rKa0D@zvL4xuQlZ4L_?X5VVG8de33(RXkv&1Fv0|`3f=5F3*q4hoYyDk=i@4wDEED3gyW zDgpVEx++is5R(flCLGZ45!s~y007zo000;O000000000000000!xxiL3>A}ND=z|` z8Iv9?7?Z0jF9IPPliVvn0uUdQ9xO)zZIfm!K><0Fs4OD|Cy}_5K9kTa6#-zA<}5w| P)srPHBL6Q?rOG;9D0O>9X8M?b$zERJ; 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 F{{rVB`s@Gz delta 2366 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 diff --git a/tests/input/table06.xlsx b/tests/input/table06.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..a655781e2674c9d917c9e8303cf8baf40ed2829e GIT binary patch literal 11718 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 literal 0 HcmV?d00001 diff --git a/tests/input/vml02.xlsx b/tests/input/vml02.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..18c61474cd1d6e19260a2b94ce5dbf3edd0575c3 GIT binary patch literal 9289 zcmeHtg_x8{wJ%rLAEscN@A|(w{lF}hHG($@dB@GgSbO=a;^e{+w%ScI=fTZL% z>Un>j!}0t6fZzA->zWzyS>a zAO_4L=}Cg@UCixW3^hC)%$*H5!FIN^*`JVD-U5&j|NrmyzbyhK8hy$zZh|I;ef-$> zERKChbmP?+*iQGoR2?vE79l#JSJzXz8_P?K%1rn0x|XFpePp37!8IKd?sFF!6`(wnDoy| zOFT-%JlvZ4jP-%gX5l1f1SNSAm75NiFi?qk_ikG_GWoK$ z-&s4X6tAbxpVCV4vnb{hqN*AHyOZc9!E##QL_b03HM)!>QmRcF`K$RX$N0ES8hcl z-1RjIK=mJ~Sfk0!aD>2@A|lgp0E0+|PUg1GT%14lwAsD?O~L;)sTUbHgvhyDox8G4 zlFR3t_Oh5+d5wy)jdU8+ZFj%Y)I{an6+bx+LJ5#Jg^wJs4L#DE`?~r&SJv?>fxuj=J|@Y^k>VM| z!hLQlk`_2cL-4{>i9WeNl7sXy!k%+_Qsld4dWEoI*@Xj<`EY0Ptu24f zOsk^P=0TA!1wo5SW~au`kN6sfh++FT*8Rm2k`EDg8W32&1HeQA+j9MayF19q#smbi z`LXc)1%1>X&_`s<|KD3l+>m?+H$mraz%Ie6{a6`2ecD&)pk`~ImobWIm3BnDOPMXr zS=sPl^X5aMQ;Y7COWu^7uQrq&7)+ai&s0emF%Oxh=iIU9QrFTj2s&o;L{X!$neI+c zOg)2>QSz@TET75JH-gm`UN7Y&m{Gn;4JQ~`Q>GX#e9$-EQ#kP0okh^xgKKOQWs_K? zq7Hj>ZZ5zo|8@NJ37#FC!W(8%ZMyx3?;KgKxcHTwS9RPJRLiSu68_wa9eNh|X`-SJWH{yaZgYF-`5 zB5(jiU6L+GkI#YX&O3XNJ~m`Qr%)>zWY{JKyC3j8?xWxw?eh!qt*s=zmk)U&JK!H<6FoK z5Ix3!QY0Z5?F=b?*DctGDsWMF5wfi0@{N69v>G!W8eZA~z0}8M72e4uwP2we=$<)9 zV0=(+yuF>f#}OM2_APCG`?;DUM-HQr zv`6-J*@XT?E>n;r_rNzZF=a&>T_2P`C2B{wyLBoe*j0!h@K?~Ct&E+_&D33-Uf5eY z|HxDRfydbG+yudk%?niR+jhk`gmR<7!^G=I62dd$eCmAaBX9~b&PUYI^RBxhX=J2w ziqywSIOs1Hct&8bota%_BPoU`M+*sj8sK`n+mh7yI9FJxoa+NUc398@c^HnG!B>5! z@!oIcmB7dxMM$cpmlZr`fQRt4|Fh8*kuL4KJCKXAu62O&M z!M2iTNbQp%>!tFL1;B`RhcEuvnez^g2$k%!8|ofMZr`0>@YoQoo*^=Q|2(YOHq>+Y73 zwtD+i+|~J8>!gaV4(Q*YrH|i~6+OR7qdNDkY>Gafb!Kr_ej9Z~Drc@nT~9uI<~6;! zi48W)xm1a&$~;LC+l(fo|7yc@8ei8iDafpU(Rhyfr?70~Gu8*70|4q2KT3d~dF5hd zZfDN*bN@3I+d3*BxB##ff7+ea1!TuuOM&4UK3$PkszlLYA4>fqB}rR7TYOZ`hhk>w zB@(Q`I2oyNhufBY7`f3UlSwbM6y=QMSXRE0yiZ{ionmq#REplu`+9zf!S!e+5RxTH ze|NwB8|N*X+H&=(NzXtsn#WKoy(gV| zbR|<7KXUKo_7d-oea+L-##7|WBgPcHH_8Pg^5zv%xZPrt$$JzN7Cv4BP>Pt3f=PQv zgKl+jmpyc|{Q*YrYx#FN?)&IK-a9JE!!uczzVf1>ib8OXU=YANC$*i71rj3Cz#oAX zJyEP3vFF2i1{f9(A&H7jWi|`&fqdb7B@uyFBWRh=%wMJpQ3^)<8 zq~esvb&xz@(*_Gg1UjvnXmwB-d24qzMwoWhH0vO1^5MvL9nZ!HnSAA=WT%XI&62xz znh-;@^Y!WGv}^QPfP&c5b!urUMFl0^Tn6SC(g?Q~sJmQMa}g(h(##WEX**ztbVi!) ziz3;~=6X(@_JmW7Wsjqu41UsIpg-{I(-7|R zQWyKIPcl*0Yynw-Fu#M8E-EA=1#3rvWnB3(%Id=Xy+2l*4JWvF`F6#pmt$%gGaef#YS9CqSCh@UIA5S z8GHFLW`*f{oj&B_Tm49}%c1#qgSx8gh3mzQs?f2@#Io5agM|F48&_Y@`zy*}5Haev ze;T}%JUR(pA4?RyEpV6uokR(npr(N@x{9V#;X3hJ^kMaX=QFJ?!%9#5be5RFQh52W z-&(hj&-vZ$5yc|s`W3c7{AA5Q=;zeoVA^$qwq7NnY@1030cd1o&Fl_(`iGC;MS6p~ zk|In+(baQ(V#T+a%_~eeQE1)dy>o{=3baexO7nVJkm{<0in_~M0t{B01^3lRp*UO{ zO`@@{?r}0PM~pm$+uWbLL;cNh^q9$^B)E$O>Ak}2sWEBWY|Q&0+;jE#PiEiS(@GV2 z1hK3g)Qxvqa?8~*i0CHplCp4d`4U3_5%-zduXR!SJ)dGv%lhH6P72bJU)^VIdsSxB zVEdQA1s`n5&r28r5(YYW2g%qn;c?d+hO({meYo6r9JM_1&TBr+Lto@6v@O#e zBpQ1sG?|BnaB4EPW!2!gm@^-wsK6pB0uBc%oG}6ohfLcm9H+u-czPATqAsjRg=!dp zg?%22jYfB_nxuI6MxrF?t3lFT1*{YZ8-$&h{TM6e~%gUtj*s$60ko3Jznme9VB5<#W@bxh1G|iz( zCiHOTHfhZK9K37{%ClRDS(*k?-750#qpJ3#cK1 z)}briYDdpLi?b7n;f!%}K#hv0s)pvu>5S!<#@FiB>KHl{q#cMF+j4x;x$sdoT^mU0 z8|?WQ!S7~m+%@TDn^y#_Vpa!+FnxO5Db(pb!R8D8l5@VWPF4RUlZR1>8*0hupLIm} zTIA(&9p%7iX)9tu`gi%j*=C>igCy1?I1BEtCCk~x!`A#K9m!Q!ihy$yG?N`a!kl#{ z!Dz_+_>CIdU&5W$7Q4AO$rk6(IM=cKd`q~JN|-Y*`FTmf{(5tYpxPC$wqzNb)DBg_ zr!jw`6*jIK8=*_b2ahsX!f4Zhox&eC3h8}Vsl}EFWpd{9@?O#gN2J#RW-U8SCfL}& z#P24+9@XG$0qiAVCS(aQJXDn-RQREm7Qt@S-8Q?lalI#aLZY1h^wF)|n&c(yIVIif zAaB~2huYmh$M)g}OA*`+w;twAv|IBHE}CL1l5luv3Dc;>F!tzx#~#@6&dA+o>Dk!8 z&x^2XCh;TD6)Iq)uM@DC2cm~J5d+xj`Ruy`xJ*Mi9=L!x?Rpiuu489Wc`Ul3-7%)` zYA@&E6ES;M@kt7=sm4-hq6pBqjOCMfht7|pfFs1MN5IUtB;1560Ja5colONr*CpR)dSJh}3PA|RJ%`ma!LaKLyVWa@F7LRPuUQkj*Rw-5l~JlMha3j#lFzW! zj%QxFd9@e$EGNJ$pma(Asj&BSDOJU9iPa{u1s!z!oEjFNF}i{tmFmnNO~9m}8zHTE za^^#02}@_o;q!kSY35_4mludpzJ*}?2!8T|^qV;uyZ@k`TyA!@Qoqi5I1%UD&y=F! z0*G;6_cQu{VYsaw*Xnj#u5I!oeR8!lQFW+MMGRxFg<@=o6ny65Y%nH{qhM=%KtL9s zr~Hf@FBDcF=v`%OAdBo*Y|;p^SNK@$@-ZU!4v?P1HP4w())nd&ocri%7`!>;u_;2v zYWdYIUEPp7bc!{ZKg3mHpjfkVk=J8fPtq-NiYZ%!xD#)wzB}B^nOCB+<1XRR#&8IE zMh67;2ImE}U^?VpHhv98D+V!GjIn6aTq`VEB-{VdQBzB^8ZwVSIq#Xcu37wRO{s_$ zm!-Ue#IIThOb@hs5f)?}oBE{LrA#J35%~M;D)q0}siqBdS?>fH( z@N<2L`L>W^od>pdU?=2QEW#~G8Q(YqlHlYz+g-F9V?>~E8>q6)<1i)E>pWwY{cw3G z&_IOlWZsiK>SS}O&`}`Uo2QD>;|#OUr#PtOA#XNb!fM);w$QTm#*Jp@Ok#(5^ZQX^ zChn(x=akRGIOqLzYg@Pftsy=@*EVW|EjxrLh+#r4nb38z@$Smz$PYUFeN;4U-*K8Qgdm|+~%=|nv^5GPZNGMFbuH2$ES>iUCK#PLe z$B_b?j$BNkIb;dy~B0tf-m}|W5Sy_7|eztKZhdLCFB^&#!4%0%U z&L~^2Yx?MXiM6#8;wy9nNf3@ojT6?hAG1tK^CM25Oxrb3b%34(oLiugd6x#jzHP>* zG%If(oxy?ndwy&}z^bxN|2+&cOus#nAU_?Z+Zj1psZS>!kMIlUY$g{SZHFzP)Vf#b zp3iMdzr>JvQenyUiW#DLAXCXqEIb^3+?_!u{4^{$rd^~mv75Kd(;&8`cd;vLq(Rk7 z&kx>f3|sbO9PRdFzvPvhB5;112al6faaUc+hn=BnGKkx@_) z%yOyr8`iv-kp@;zd3Id`E$*+WY1t21`Qo%+27Om|Ju-+rS3OicJ4LVK30Ivu;GOl( zIpJ|Zz7Gr4I#?ZEBw#JqCVaxIx|DKHB(hF{EPSed(VfAYt&`Bmw%_7q`;-ZJH z8b_dvu8ED?m9K1xS0U%oW>oF1ZTo*#myV7Lr!5f6gFZqjApbRK{H@UYUE)Qm^;jds z?`ETb<@j`z;FX!#(J_ zi^$t;ss$2oY?Y!?$tfLz6-;Z_dPsI-IZ5wc7+uBnVq38q5q3fsX=JACJ*&l@RvV2q za7I$NCrrFwB5_|S9k?%wf8dgEr8?Y5!*gJAjeRFKG)|!H6Za?TeQy2FPg(E0U8LD| zOW*!fNyO$jeuZ}aMAdaE%a*C4(U%HDKmpj&UL%}4XmqZrC(h8N0ywpc)ezAUt5%~Ag?e=`W7z=Udhl)e+ zYivwGc6NxClk?9~vq=?-(7Aw3I9HNjcR@RR-Q1pbdYtfpg)^iqpIKmPQyf`xnIXu! zmbwW{ECJ>N@$%(<8ng#8-x7&=rfQE(u&%d>?x(TmJ3T*6D|BZ*C02w@hykW$Xn3FF zL8w@zEP4jXGxY{4TOccmOaW0eOOt>_77uKzhqaKAs7khQy^a2b$AYU2y4X#4 zXJI8EGmE2#xkro#9t)=^Qf<$nWyrBd(Qg9iJ!I13S#l3jIj?}sd~Ah}Ik}!-o9s~y zz8-h|5M!(&W-$WQcCw)JS_;`u|71 z+=^YMdEj0KIYLMme+Zj342C9#2%8QfY=j8G)C^>*>I8Cd<}w92ng8n2{Z}VNL=F%c zXP^M%28QgST}$@(q*YJQW$lQYlYJ3)$Oe-B9IUps)ptgtg zLd&h523m zqSn{@>ys#(iJfqiVr(dDU0YM_MBv;z`IIO@Rhp?b# zNp8n~OP!wuX%+U$rhZ(E@s3|f&>y>4ZMHez@*%Tj>8|*G9fsp6ZP7vemTm8oWns%7 zbCp>rq631sLx>&^OFTB9~lzY?kMvS`I)k#ElIB%e6eg26|tAhju-)T+9 zgm6wqTHFX^%X+_61u;A>%xaMXg_t<$pB%R4yH=yni0!I``PVck^a$HP42xQY(-=BK z!b5Y=-Y@HGDAu8zr&7IfDOwiM6t)quoz@oYWMJ`NEquZa8?Nm%A1^L&#ZNNf9KKww zD3#jpqrD}RxUS^JL|}?*r_S3cMrVG>w@PM=zFl=&AqQI)aVata2^yCO96SVHHR7SE_Sr*9S#JOdCQ-JL70O} zO`OFBHoW6a{#Cw+=g2TS4(!RlzX&+`um&>LzB)LB9XZvoe2)}?O4*uDa{g2^~V+0~4{??$qY533n*53`?5lZX-z1wxu z&&{64Z%^+K-*4RLfZQ~`sonoJrp5kg{4XW{riYt~`EL)~zdZbnR{e^`Z*ujsdw0{} zO|AL2LzG)TAL*v@eAB_r%Kx{6TB2X?^glYlP1BpDqW+ut ZU-P`G0vZCfKcp61fHng7aM~YN{|A}v0s8;| literal 0 HcmV?d00001 diff --git a/tests/input/vml03.xlsx b/tests/input/vml03.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..1ca0d513696745ea5b0432dee3429c65a3be9722 GIT binary patch literal 12016 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 d@Uu*3R>kA$93apjOIw9 Result<(), XlsxError> { let button = Button::new(); + // Worksheet 1. let worksheet1 = workbook.add_worksheet(); worksheet1.insert_button(1, 2, &button)?; + // Worksheet 2. let worksheet2 = workbook.add_worksheet(); worksheet2.insert_button(4, 4, &button)?; diff --git a/tests/integration/button08.rs b/tests/integration/button08.rs new file mode 100644 index 00000000..96334949 --- /dev/null +++ b/tests/integration/button08.rs @@ -0,0 +1,42 @@ +// Test case that compares a file generated by rust_xlsxwriter with a file +// created by Excel. +// +// SPDX-License-Identifier: MIT OR Apache-2.0 +// +// Copyright 2022-2024, John McNamara, jmcnamara@cpan.org + +use crate::common; +use rust_xlsxwriter::{Button, Note, Workbook, XlsxError}; + +// Create rust_xlsxwriter file to compare against Excel file. +fn create_new_xlsx_file(filename: &str) -> Result<(), XlsxError> { + let mut workbook = Workbook::new(); + + // Worksheet 1. + let worksheet1 = workbook.add_worksheet(); + + let button = Button::new(); + worksheet1.insert_button(1, 2, &button)?; + + // Worksheet 2. + let worksheet2 = workbook.add_worksheet(); + worksheet2.set_default_note_author("John"); + + let note = Note::new("Foo"); + worksheet2.insert_note(0, 0, ¬e)?; + + workbook.save(filename)?; + + Ok(()) +} + +#[test] +fn test_button08() { + let test_runner = common::TestRunner::new() + .set_name("button08") + .set_function(create_new_xlsx_file) + .initialize(); + + test_runner.assert_eq(); + test_runner.cleanup(); +} diff --git a/tests/integration/button09.rs b/tests/integration/button09.rs new file mode 100644 index 00000000..8dd6abe2 --- /dev/null +++ b/tests/integration/button09.rs @@ -0,0 +1,42 @@ +// Test case that compares a file generated by rust_xlsxwriter with a file +// created by Excel. +// +// SPDX-License-Identifier: MIT OR Apache-2.0 +// +// Copyright 2022-2024, John McNamara, jmcnamara@cpan.org + +use crate::common; +use rust_xlsxwriter::{Button, Note, Workbook, XlsxError}; + +// Create rust_xlsxwriter file to compare against Excel file. +fn create_new_xlsx_file(filename: &str) -> Result<(), XlsxError> { + let mut workbook = Workbook::new(); + + // Worksheet 1. + let worksheet1 = workbook.add_worksheet(); + worksheet1.set_default_note_author("John"); + + let note = Note::new("Foo"); + worksheet1.insert_note(0, 0, ¬e)?; + + // Worksheet 2. + let worksheet2 = workbook.add_worksheet(); + + let button = Button::new(); + worksheet2.insert_button(1, 2, &button)?; + + workbook.save(filename)?; + + Ok(()) +} + +#[test] +fn test_button09() { + let test_runner = common::TestRunner::new() + .set_name("button09") + .set_function(create_new_xlsx_file) + .initialize(); + + test_runner.assert_eq(); + test_runner.cleanup(); +} diff --git a/tests/integration/button10.rs b/tests/integration/button10.rs new file mode 100644 index 00000000..49566391 --- /dev/null +++ b/tests/integration/button10.rs @@ -0,0 +1,49 @@ +// Test case that compares a file generated by rust_xlsxwriter with a file +// created by Excel. +// +// SPDX-License-Identifier: MIT OR Apache-2.0 +// +// Copyright 2022-2024, John McNamara, jmcnamara@cpan.org + +use crate::common; +use rust_xlsxwriter::{Button, Note, Workbook, XlsxError}; + +// Create rust_xlsxwriter file to compare against Excel file. +fn create_new_xlsx_file(filename: &str) -> Result<(), XlsxError> { + let mut workbook = Workbook::new(); + + // Worksheet 1. + let worksheet1 = workbook.add_worksheet(); + worksheet1.set_default_note_author("John"); + + let note = Note::new("Some text"); + worksheet1.insert_note(0, 0, ¬e)?; + + // Worksheet 2. + let worksheet2 = workbook.add_worksheet(); + + let button = Button::new(); + worksheet2.insert_button(1, 1, &button)?; + + // Worksheet 3. + let worksheet3 = workbook.add_worksheet(); + worksheet3.set_default_note_author("John"); + + let note = Note::new("More text"); + worksheet3.insert_note(1, 2, ¬e)?; + + workbook.save(filename)?; + + Ok(()) +} + +#[test] +fn test_button10() { + let test_runner = common::TestRunner::new() + .set_name("button10") + .set_function(create_new_xlsx_file) + .initialize(); + + test_runner.assert_eq(); + test_runner.cleanup(); +} diff --git a/tests/integration/button11.rs b/tests/integration/button11.rs new file mode 100644 index 00000000..48f6dcb4 --- /dev/null +++ b/tests/integration/button11.rs @@ -0,0 +1,49 @@ +// Test case that compares a file generated by rust_xlsxwriter with a file +// created by Excel. +// +// SPDX-License-Identifier: MIT OR Apache-2.0 +// +// Copyright 2022-2024, John McNamara, jmcnamara@cpan.org + +use crate::common; +use rust_xlsxwriter::{Button, Note, Workbook, XlsxError}; + +// Create rust_xlsxwriter file to compare against Excel file. +fn create_new_xlsx_file(filename: &str) -> Result<(), XlsxError> { + let mut workbook = Workbook::new(); + + // Worksheet 1. + let worksheet1 = workbook.add_worksheet(); + + let button = Button::new(); + worksheet1.insert_button(1, 2, &button)?; + + // Worksheet 2. + let worksheet2 = workbook.add_worksheet(); + worksheet2.set_default_note_author("John"); + + let note = Note::new("Some text"); + worksheet2.insert_note(1, 1, ¬e)?; + + // Worksheet 3. + let worksheet3 = workbook.add_worksheet(); + worksheet3.set_default_note_author("John"); + + let note = Note::new("More text"); + worksheet3.insert_note(2, 2, ¬e)?; + + workbook.save(filename)?; + + Ok(()) +} + +#[test] +fn test_button11() { + let test_runner = common::TestRunner::new() + .set_name("button11") + .set_function(create_new_xlsx_file) + .initialize(); + + test_runner.assert_eq(); + test_runner.cleanup(); +} diff --git a/tests/integration/button12.rs b/tests/integration/button12.rs new file mode 100644 index 00000000..dc45b83f --- /dev/null +++ b/tests/integration/button12.rs @@ -0,0 +1,49 @@ +// Test case that compares a file generated by rust_xlsxwriter with a file +// created by Excel. +// +// SPDX-License-Identifier: MIT OR Apache-2.0 +// +// Copyright 2022-2024, John McNamara, jmcnamara@cpan.org + +use crate::common; +use rust_xlsxwriter::{Button, Note, Workbook, XlsxError}; + +// Create rust_xlsxwriter file to compare against Excel file. +fn create_new_xlsx_file(filename: &str) -> Result<(), XlsxError> { + let mut workbook = Workbook::new(); + + // Worksheet 1. + let worksheet1 = workbook.add_worksheet(); + worksheet1.set_default_note_author("John"); + + let note = Note::new("Some text"); + worksheet1.insert_note(0, 0, ¬e)?; + + let button = Button::new(); + worksheet1.insert_button(1, 2, &button)?; + + // Worksheet 2. + let _worksheet2 = workbook.add_worksheet(); + + // Worksheet 3. + let worksheet3 = workbook.add_worksheet(); + worksheet3.set_default_note_author("John"); + + let note = Note::new("More text"); + worksheet3.insert_note(2, 2, ¬e)?; + + workbook.save(filename)?; + + Ok(()) +} + +#[test] +fn test_button12() { + let test_runner = common::TestRunner::new() + .set_name("button12") + .set_function(create_new_xlsx_file) + .initialize(); + + test_runner.assert_eq(); + test_runner.cleanup(); +} diff --git a/tests/integration/comment06.rs b/tests/integration/comment06.rs new file mode 100644 index 00000000..c825022a --- /dev/null +++ b/tests/integration/comment06.rs @@ -0,0 +1,47 @@ +// Test case that compares a file generated by rust_xlsxwriter with a file +// created by Excel. +// +// SPDX-License-Identifier: MIT OR Apache-2.0 +// +// Copyright 2022-2024, John McNamara, jmcnamara@cpan.org + +use crate::common; +use rust_xlsxwriter::{Note, Workbook, XlsxError}; + +// Create rust_xlsxwriter file to compare against Excel file. +fn create_new_xlsx_file(filename: &str) -> Result<(), XlsxError> { + let mut workbook = Workbook::new(); + + let worksheet = workbook.add_worksheet(); + worksheet.set_default_note_author("John"); + + let note = Note::new("Some text"); + worksheet.insert_note(0, 0, ¬e)?; + + let note = Note::new("Some text"); + worksheet.insert_note(1, 0, ¬e)?; + + let note = Note::new("Some text").set_visible(true); + worksheet.insert_note(2, 0, ¬e)?; + + let note = Note::new("Some text"); + worksheet.insert_note(3, 0, ¬e)?; + + let note = Note::new("Some text"); + worksheet.insert_note(4, 0, ¬e)?; + + workbook.save(filename)?; + + Ok(()) +} + +#[test] +fn test_comment06() { + let test_runner = common::TestRunner::new() + .set_name("comment06") + .set_function(create_new_xlsx_file) + .initialize(); + + test_runner.assert_eq(); + test_runner.cleanup(); +} diff --git a/tests/integration/comment07.rs b/tests/integration/comment07.rs new file mode 100644 index 00000000..67595678 --- /dev/null +++ b/tests/integration/comment07.rs @@ -0,0 +1,49 @@ +// Test case that compares a file generated by rust_xlsxwriter with a file +// created by Excel. +// +// SPDX-License-Identifier: MIT OR Apache-2.0 +// +// Copyright 2022-2024, John McNamara, jmcnamara@cpan.org + +use crate::common; +use rust_xlsxwriter::{Note, Workbook, XlsxError}; + +// Create rust_xlsxwriter file to compare against Excel file. +fn create_new_xlsx_file(filename: &str) -> Result<(), XlsxError> { + let mut workbook = Workbook::new(); + + let worksheet = workbook.add_worksheet(); + worksheet.set_default_note_author("John"); + + let note = Note::new("Some text"); + worksheet.insert_note(0, 0, ¬e)?; + + let note = Note::new("Some text"); + worksheet.insert_note(1, 0, ¬e)?; + + let note = Note::new("Some text"); + worksheet.insert_note(2, 0, ¬e)?; + + let note = Note::new("Some text"); + worksheet.insert_note(3, 0, ¬e)?; + + let note = Note::new("Some text"); + worksheet.insert_note(4, 0, ¬e)?; + + worksheet.show_notes(); + + workbook.save(filename)?; + + Ok(()) +} + +#[test] +fn test_comment07() { + let test_runner = common::TestRunner::new() + .set_name("comment07") + .set_function(create_new_xlsx_file) + .initialize(); + + test_runner.assert_eq(); + test_runner.cleanup(); +} diff --git a/tests/integration/comment08.rs b/tests/integration/comment08.rs new file mode 100644 index 00000000..2efe377c --- /dev/null +++ b/tests/integration/comment08.rs @@ -0,0 +1,49 @@ +// Test case that compares a file generated by rust_xlsxwriter with a file +// created by Excel. +// +// SPDX-License-Identifier: MIT OR Apache-2.0 +// +// Copyright 2022-2024, John McNamara, jmcnamara@cpan.org + +use crate::common; +use rust_xlsxwriter::{Note, Workbook, XlsxError}; + +// Create rust_xlsxwriter file to compare against Excel file. +fn create_new_xlsx_file(filename: &str) -> Result<(), XlsxError> { + let mut workbook = Workbook::new(); + + let worksheet = workbook.add_worksheet(); + worksheet.set_default_note_author("John"); + + let note = Note::new("Some text"); + worksheet.insert_note(0, 0, ¬e)?; + + let note = Note::new("Some text"); + worksheet.insert_note(1, 0, ¬e)?; + + let note = Note::new("Some text").set_visible(false); + worksheet.insert_note(2, 0, ¬e)?; + + let note = Note::new("Some text").set_visible(true); + worksheet.insert_note(3, 0, ¬e)?; + + let note = Note::new("Some text"); + worksheet.insert_note(4, 0, ¬e)?; + + worksheet.show_notes(); + + workbook.save(filename)?; + + Ok(()) +} + +#[test] +fn test_comment08() { + let test_runner = common::TestRunner::new() + .set_name("comment08") + .set_function(create_new_xlsx_file) + .initialize(); + + test_runner.assert_eq(); + test_runner.cleanup(); +} diff --git a/tests/integration/comment10.rs b/tests/integration/comment10.rs new file mode 100644 index 00000000..6c30778c --- /dev/null +++ b/tests/integration/comment10.rs @@ -0,0 +1,72 @@ +// Test case that compares a file generated by rust_xlsxwriter with a file +// created by Excel. +// +// SPDX-License-Identifier: MIT OR Apache-2.0 +// +// Copyright 2022-2024, John McNamara, jmcnamara@cpan.org + +use crate::common; +use rust_xlsxwriter::{Format, Note, Workbook, XlsxError}; + +// Create rust_xlsxwriter file to compare against Excel file. +fn create_new_xlsx_file_1(filename: &str) -> Result<(), XlsxError> { + let mut workbook = Workbook::new(); + + let worksheet = workbook.add_worksheet(); + worksheet.set_default_note_author("John"); + + worksheet.write(0, 0, "Foo")?; + + let format = Format::new() + .set_background_color("#6EE44E") + .set_font_name("Tahoma") + .set_font_size(8); + + let note = Note::new("Some text").set_format(format); + worksheet.insert_note(1, 1, ¬e)?; + + workbook.save(filename)?; + + Ok(()) +} + +// Create rust_xlsxwriter file to compare against Excel file. +fn create_new_xlsx_file_2(filename: &str) -> Result<(), XlsxError> { + let mut workbook = Workbook::new(); + + let worksheet = workbook.add_worksheet(); + worksheet.set_default_note_author("John"); + + worksheet.write(0, 0, "Foo")?; + + let note = Note::new("Some text").set_background_color("#6EE44E"); + worksheet.insert_note(1, 1, ¬e)?; + + workbook.save(filename)?; + + Ok(()) +} + +#[test] +fn test_comment10_1() { + let test_runner = common::TestRunner::new() + .set_name("comment10") + .unique("1") + .set_function(create_new_xlsx_file_1) + .initialize(); + + test_runner.assert_eq(); + test_runner.cleanup(); +} + +#[test] +fn test_comment10_2() { + let test_runner = common::TestRunner::new() + .set_name("comment10") + .unique("2") + .set_function(create_new_xlsx_file_2) + .initialize(); + + test_runner.assert_eq(); + test_runner.cleanup(); +} diff --git a/tests/integration/comment11.rs b/tests/integration/comment11.rs new file mode 100644 index 00000000..68c1b89c --- /dev/null +++ b/tests/integration/comment11.rs @@ -0,0 +1,38 @@ +// Test case that compares a file generated by rust_xlsxwriter with a file +// created by Excel. +// +// SPDX-License-Identifier: MIT OR Apache-2.0 +// +// Copyright 2022-2024, John McNamara, jmcnamara@cpan.org + +use crate::common; +use rust_xlsxwriter::{Note, Workbook, XlsxError}; + +// Create rust_xlsxwriter file to compare against Excel file. +fn create_new_xlsx_file(filename: &str) -> Result<(), XlsxError> { + let mut workbook = Workbook::new(); + + let _worksheet1 = workbook.add_worksheet(); + let worksheet2 = workbook.add_worksheet(); + worksheet2.set_default_note_author("John"); + + worksheet2.write(0, 0, "Foo")?; + + let note = Note::new("Some text"); + worksheet2.insert_note(1, 1, ¬e)?; + + workbook.save(filename)?; + + Ok(()) +} + +#[test] +fn test_comment11() { + let test_runner = common::TestRunner::new() + .set_name("comment11") + .set_function(create_new_xlsx_file) + .initialize(); + + test_runner.assert_eq(); + test_runner.cleanup(); +} diff --git a/tests/integration/comment12.rs b/tests/integration/comment12.rs new file mode 100644 index 00000000..18e602c6 --- /dev/null +++ b/tests/integration/comment12.rs @@ -0,0 +1,40 @@ +// Test case that compares a file generated by rust_xlsxwriter with a file +// created by Excel. +// +// SPDX-License-Identifier: MIT OR Apache-2.0 +// +// Copyright 2022-2024, John McNamara, jmcnamara@cpan.org + +use crate::common; +use rust_xlsxwriter::{Note, Workbook, XlsxError}; + +// Create rust_xlsxwriter file to compare against Excel file. +fn create_new_xlsx_file(filename: &str) -> Result<(), XlsxError> { + let mut workbook = Workbook::new(); + + let worksheet = workbook.add_worksheet(); + worksheet.set_default_note_author("John"); + + worksheet.write(0, 0, "Foo")?; + + let note = Note::new("Some text"); + worksheet.insert_note(0, 0, ¬e)?; + + worksheet.set_row_height(0, 21)?; + worksheet.set_column_width(1, 10)?; + + workbook.save(filename)?; + + Ok(()) +} + +#[test] +fn test_comment12() { + let test_runner = common::TestRunner::new() + .set_name("comment12") + .set_function(create_new_xlsx_file) + .initialize(); + + test_runner.assert_eq(); + test_runner.cleanup(); +} diff --git a/tests/integration/comment13.rs b/tests/integration/comment13.rs new file mode 100644 index 00000000..a859219d --- /dev/null +++ b/tests/integration/comment13.rs @@ -0,0 +1,79 @@ +// Test case that compares a file generated by rust_xlsxwriter with a file +// created by Excel. +// +// SPDX-License-Identifier: MIT OR Apache-2.0 +// +// Copyright 2022-2024, John McNamara, jmcnamara@cpan.org + +use crate::common; +use rust_xlsxwriter::{Format, Note, Workbook, XlsxError}; + +// Create rust_xlsxwriter file to compare against Excel file. +fn create_new_xlsx_file_1(filename: &str) -> Result<(), XlsxError> { + let mut workbook = Workbook::new(); + + let worksheet = workbook.add_worksheet(); + worksheet.set_default_note_author("John"); + + worksheet.write(0, 0, "Foo")?; + + let format = Format::new() + .set_font_name("Courier") + .set_font_size(10) + .set_font_family(3); + + let note = Note::new("Some text").set_format(format); + worksheet.insert_note(1, 1, ¬e)?; + + workbook.save(filename)?; + + Ok(()) +} + +fn create_new_xlsx_file_2(filename: &str) -> Result<(), XlsxError> { + let mut workbook = Workbook::new(); + + let worksheet = workbook.add_worksheet(); + worksheet.set_default_note_author("John"); + + worksheet.write(0, 0, "Foo")?; + + let note = Note::new("Some text") + .set_font_name("Courier") + .set_font_size(10) + .set_font_family(3); + worksheet.insert_note(1, 1, ¬e)?; + + workbook.save(filename)?; + + Ok(()) +} + +#[test] +fn test_comment13_1() { + let test_runner = common::TestRunner::new() + .set_name("comment13") + // Ignore the difference in the styles file that reflects the change to + // the comment font. This doesn't have an effect on the output and is + // also very hard to replicate cleanly. + .ignore_file("xl/styles.xml") + .unique("1") + .set_function(create_new_xlsx_file_1) + .initialize(); + + test_runner.assert_eq(); + test_runner.cleanup(); +} + +#[test] +fn test_comment13_2() { + let test_runner = common::TestRunner::new() + .set_name("comment13") + .ignore_file("xl/styles.xml") + .unique("2") + .set_function(create_new_xlsx_file_2) + .initialize(); + + test_runner.assert_eq(); + test_runner.cleanup(); +} diff --git a/tests/integration/comment14.rs b/tests/integration/comment14.rs new file mode 100644 index 00000000..ebec244e --- /dev/null +++ b/tests/integration/comment14.rs @@ -0,0 +1,39 @@ +// Test case that compares a file generated by rust_xlsxwriter with a file +// created by Excel. +// +// SPDX-License-Identifier: MIT OR Apache-2.0 +// +// Copyright 2022-2024, John McNamara, jmcnamara@cpan.org + +use crate::common; +use rust_xlsxwriter::{Note, Workbook, XlsxError}; + +// Create rust_xlsxwriter file to compare against Excel file. +fn create_new_xlsx_file(filename: &str) -> Result<(), XlsxError> { + let mut workbook = Workbook::new(); + + let worksheet = workbook.add_worksheet(); + worksheet.set_default_note_author("John"); + + worksheet.write(0, 0, "Foo")?; + + let note = Note::new("Some text"); + worksheet.insert_note(1, 1, ¬e)?; + + worksheet.set_column_width(2, 13)?; + + workbook.save(filename)?; + + Ok(()) +} + +#[test] +fn test_comment14() { + let test_runner = common::TestRunner::new() + .set_name("comment14") + .set_function(create_new_xlsx_file) + .initialize(); + + test_runner.assert_eq(); + test_runner.cleanup(); +} diff --git a/tests/integration/comment15.rs b/tests/integration/comment15.rs new file mode 100644 index 00000000..b9c79dd4 --- /dev/null +++ b/tests/integration/comment15.rs @@ -0,0 +1,39 @@ +// Test case that compares a file generated by rust_xlsxwriter with a file +// created by Excel. +// +// SPDX-License-Identifier: MIT OR Apache-2.0 +// +// Copyright 2022-2024, John McNamara, jmcnamara@cpan.org + +use crate::common; +use rust_xlsxwriter::{Format, Note, Workbook, XlsxError}; + +// Create rust_xlsxwriter file to compare against Excel file. +fn create_new_xlsx_file(filename: &str) -> Result<(), XlsxError> { + let mut workbook = Workbook::new(); + + let format1 = Format::new().set_bold(); + + let worksheet = workbook.add_worksheet(); + worksheet.set_default_note_author("John"); + + worksheet.write_with_format(0, 0, "Foo", &format1)?; + + let note = Note::new("Some text"); + worksheet.insert_note(1, 1, ¬e)?; + + workbook.save(filename)?; + + Ok(()) +} + +#[test] +fn test_comment15() { + let test_runner = common::TestRunner::new() + .set_name("comment15") + .set_function(create_new_xlsx_file) + .initialize(); + + test_runner.assert_eq(); + test_runner.cleanup(); +} diff --git a/tests/integration/comment16.rs b/tests/integration/comment16.rs new file mode 100644 index 00000000..a92b10c8 --- /dev/null +++ b/tests/integration/comment16.rs @@ -0,0 +1,43 @@ +// Test case that compares a file generated by rust_xlsxwriter with a file +// created by Excel. +// +// SPDX-License-Identifier: MIT OR Apache-2.0 +// +// Copyright 2022-2024, John McNamara, jmcnamara@cpan.org + +use crate::common; +use rust_xlsxwriter::{Note, Workbook, XlsxError}; + +// Create rust_xlsxwriter file to compare against Excel file. +fn create_new_xlsx_file(filename: &str) -> Result<(), XlsxError> { + let mut workbook = Workbook::new(); + + let worksheet = workbook.add_worksheet(); + worksheet.set_default_note_author("John"); + + worksheet.write(0, 0, "Foo")?; + worksheet.write(6, 2, "Bar")?; + worksheet.write(13, 6, "Baz")?; + + let note = Note::new("Some text"); + worksheet.insert_note(0, 0, ¬e)?; + worksheet.insert_note(0, 3, ¬e)?; + worksheet.insert_note(6, 2, ¬e)?; + worksheet.insert_note(9, 4, ¬e)?; + worksheet.insert_note(13, 6, ¬e)?; + + workbook.save(filename)?; + + Ok(()) +} + +#[test] +fn test_comment16() { + let test_runner = common::TestRunner::new() + .set_name("comment16") + .set_function(create_new_xlsx_file) + .initialize(); + + test_runner.assert_eq(); + test_runner.cleanup(); +} diff --git a/tests/integration/header_image08.rs b/tests/integration/header_image08.rs new file mode 100644 index 00000000..9a48c49a --- /dev/null +++ b/tests/integration/header_image08.rs @@ -0,0 +1,42 @@ +// Test case that compares a file generated by rust_xlsxwriter with a file +// created by Excel. +// +// SPDX-License-Identifier: MIT OR Apache-2.0 +// +// Copyright 2022-2024, John McNamara, jmcnamara@cpan.org + +use crate::common; +use rust_xlsxwriter::{HeaderImagePosition, Image, Note, Workbook, XlsxError}; + +// Create rust_xlsxwriter file to compare against Excel file. +fn create_new_xlsx_file(filename: &str) -> Result<(), XlsxError> { + let mut workbook = Workbook::new(); + + let worksheet = workbook.add_worksheet(); + worksheet.set_default_note_author("John"); + + worksheet.write(0, 0, "Foo")?; + + let note = Note::new("Some text"); + worksheet.insert_note(1, 1, ¬e)?; + + let image = Image::new("tests/input/images/red.jpg")?; + + worksheet.set_header("&L&G"); + worksheet.set_header_image(&image, HeaderImagePosition::Left)?; + + workbook.save(filename)?; + + Ok(()) +} + +#[test] +fn test_header_image08() { + let test_runner = common::TestRunner::new() + .set_name("header_image08") + .set_function(create_new_xlsx_file) + .initialize(); + + test_runner.assert_eq(); + test_runner.cleanup(); +} diff --git a/tests/integration/header_image09.rs b/tests/integration/header_image09.rs new file mode 100644 index 00000000..cafb4e25 --- /dev/null +++ b/tests/integration/header_image09.rs @@ -0,0 +1,48 @@ +// Test case that compares a file generated by rust_xlsxwriter with a file +// created by Excel. +// +// SPDX-License-Identifier: MIT OR Apache-2.0 +// +// Copyright 2022-2024, John McNamara, jmcnamara@cpan.org + +use crate::common; +use rust_xlsxwriter::{HeaderImagePosition, Image, Note, Workbook, XlsxError}; + +// Create rust_xlsxwriter file to compare against Excel file. +fn create_new_xlsx_file(filename: &str) -> Result<(), XlsxError> { + let mut workbook = Workbook::new(); + + // Worksheet 1. + let worksheet1 = workbook.add_worksheet(); + worksheet1.set_portrait(); + worksheet1.set_default_note_author("John"); + + worksheet1.write(0, 0, "Foo")?; + + let note = Note::new("Some text"); + worksheet1.insert_note(1, 1, ¬e)?; + + // Worksheet 2. + let worksheet2 = workbook.add_worksheet(); + worksheet2.set_portrait(); + + let image = Image::new("tests/input/images/red.jpg")?; + + worksheet2.set_header("&L&G"); + worksheet2.set_header_image(&image, HeaderImagePosition::Left)?; + + workbook.save(filename)?; + + Ok(()) +} + +#[test] +fn test_header_image09() { + let test_runner = common::TestRunner::new() + .set_name("header_image09") + .set_function(create_new_xlsx_file) + .initialize(); + + test_runner.assert_eq(); + test_runner.cleanup(); +} diff --git a/tests/integration/header_image10.rs b/tests/integration/header_image10.rs new file mode 100644 index 00000000..90dd6444 --- /dev/null +++ b/tests/integration/header_image10.rs @@ -0,0 +1,48 @@ +// Test case that compares a file generated by rust_xlsxwriter with a file +// created by Excel. +// +// SPDX-License-Identifier: MIT OR Apache-2.0 +// +// Copyright 2022-2024, John McNamara, jmcnamara@cpan.org + +use crate::common; +use rust_xlsxwriter::{HeaderImagePosition, Image, Note, Workbook, XlsxError}; + +// Create rust_xlsxwriter file to compare against Excel file. +fn create_new_xlsx_file(filename: &str) -> Result<(), XlsxError> { + let mut workbook = Workbook::new(); + + // Worksheet 1. + let worksheet1 = workbook.add_worksheet(); + worksheet1.set_portrait(); + + let image = Image::new("tests/input/images/red.jpg")?; + + worksheet1.set_header("&L&G"); + worksheet1.set_header_image(&image, HeaderImagePosition::Left)?; + + // Worksheet 2. + let worksheet2 = workbook.add_worksheet(); + worksheet2.set_portrait(); + worksheet2.set_default_note_author("John"); + + worksheet2.write(0, 0, "Foo")?; + + let note = Note::new("Some text"); + worksheet2.insert_note(1, 1, ¬e)?; + + workbook.save(filename)?; + + Ok(()) +} + +#[test] +fn test_header_image10() { + let test_runner = common::TestRunner::new() + .set_name("header_image10") + .set_function(create_new_xlsx_file) + .initialize(); + + test_runner.assert_eq(); + test_runner.cleanup(); +} diff --git a/tests/integration/main.rs b/tests/integration/main.rs index 1112c59d..c4c5e192 100644 --- a/tests/integration/main.rs +++ b/tests/integration/main.rs @@ -106,6 +106,11 @@ mod button03; mod button04; mod button05; mod button07; +mod button08; +mod button09; +mod button10; +mod button11; +mod button12; mod button15; mod chart_area01; mod chart_area02; @@ -477,7 +482,17 @@ mod comment02; mod comment03; mod comment04; mod comment05; +mod comment06; +mod comment07; +mod comment08; mod comment09; +mod comment10; +mod comment11; +mod comment12; +mod comment13; +mod comment14; +mod comment15; +mod comment16; mod cond_format01; mod cond_format02; mod cond_format03; @@ -553,6 +568,9 @@ mod header_image04; mod header_image05; mod header_image06; mod header_image07; +mod header_image08; +mod header_image09; +mod header_image10; mod header_image11; mod header_image12; mod header_image13; @@ -826,7 +844,9 @@ mod tab_color01; mod table01; mod table02; mod table03; +mod table04; mod table05; +mod table06; mod table07; mod table08; mod table09; @@ -861,3 +881,7 @@ mod top_left_cell01; mod top_left_cell02; mod top_left_cell03; mod utf8_06; +mod vml01; +mod vml02; +mod vml03; +mod vml04; diff --git a/tests/integration/table04.rs b/tests/integration/table04.rs new file mode 100644 index 00000000..35a29456 --- /dev/null +++ b/tests/integration/table04.rs @@ -0,0 +1,52 @@ +// Test case that compares a file generated by rust_xlsxwriter with a file +// created by Excel. +// +// SPDX-License-Identifier: MIT OR Apache-2.0 +// +// Copyright 2022-2024, John McNamara, jmcnamara@cpan.org + +use crate::common; +use rust_xlsxwriter::{Format, Note, Table, Workbook, XlsxError}; + +// Create rust_xlsxwriter file to compare against Excel file. +fn create_new_xlsx_file(filename: &str) -> Result<(), XlsxError> { + let mut workbook = Workbook::new(); + + let worksheet = workbook.add_worksheet(); + + worksheet.set_column_width(2, 10.288)?; + worksheet.set_column_width(3, 10.288)?; + worksheet.set_column_width(4, 10.288)?; + worksheet.set_column_width(5, 10.288)?; + + let table = Table::new(); + worksheet.add_table(2, 2, 12, 5, &table)?; + + worksheet.set_default_note_author("John"); + let note = Note::new("Test1"); + worksheet.insert_note(0, 7, ¬e)?; + + let note = Note::new("Test2"); + worksheet.insert_note(0, 9, ¬e)?; + + worksheet.write_url_with_format(0, 0, "http://perl.com/", &Format::default())?; + + workbook.save(filename)?; + + Ok(()) +} + +#[test] +fn test_table04() { + let test_runner = common::TestRunner::new() + .set_name("table04") + // We ignore these files since the order of the strings is different + // from Excel and we are testing for rel file creation and order. + .ignore_file("xl/sharedStrings.xml") + .ignore_file("xl/worksheets/sheet1.xml") + .set_function(create_new_xlsx_file) + .initialize(); + + test_runner.assert_eq(); + test_runner.cleanup(); +} diff --git a/tests/integration/table05.rs b/tests/integration/table05.rs index 13bfd3eb..f1c1ccae 100644 --- a/tests/integration/table05.rs +++ b/tests/integration/table05.rs @@ -6,7 +6,7 @@ // Copyright 2022-2024, John McNamara, jmcnamara@cpan.org use crate::common; -use rust_xlsxwriter::{Image, Table, Workbook, XlsxError}; +use rust_xlsxwriter::{Format, Image, Note, Table, Workbook, XlsxError}; // Create rust_xlsxwriter file to compare against Excel file. fn create_new_xlsx_file(filename: &str) -> Result<(), XlsxError> { @@ -22,12 +22,19 @@ fn create_new_xlsx_file(filename: &str) -> Result<(), XlsxError> { let table = Table::new(); worksheet.add_table(2, 2, 12, 5, &table)?; - worksheet.write_url(15, 0, "http://perl.com/")?; + worksheet.write_url_with_format(0, 0, "http://perl.com/", &Format::default())?; let image = Image::new("tests/input/images/blue.png")?.set_alt_text("blue.png"); worksheet.insert_image(3, 0, &image)?; + worksheet.set_default_note_author("John"); + let note = Note::new("Test1"); + worksheet.insert_note(0, 7, ¬e)?; + + let note = Note::new("Test2"); + worksheet.insert_note(0, 9, ¬e)?; + workbook.save(filename)?; Ok(()) @@ -37,6 +44,10 @@ fn create_new_xlsx_file(filename: &str) -> Result<(), XlsxError> { fn test_table05() { let test_runner = common::TestRunner::new() .set_name("table05") + // We ignore these files since the order of the strings is different + // from Excel and we are testing for rel file creation and order. + .ignore_file("xl/sharedStrings.xml") + .ignore_file("xl/worksheets/sheet1.xml") .set_function(create_new_xlsx_file) .initialize(); diff --git a/tests/integration/table06.rs b/tests/integration/table06.rs new file mode 100644 index 00000000..8e5f09e8 --- /dev/null +++ b/tests/integration/table06.rs @@ -0,0 +1,61 @@ +// Test case that compares a file generated by rust_xlsxwriter with a file +// created by Excel. +// +// SPDX-License-Identifier: MIT OR Apache-2.0 +// +// Copyright 2022-2024, John McNamara, jmcnamara@cpan.org + +use crate::common; +use rust_xlsxwriter::{Format, Image, Note, Table, Workbook, XlsxError}; + +// Create rust_xlsxwriter file to compare against Excel file. +fn create_new_xlsx_file(filename: &str) -> Result<(), XlsxError> { + let mut workbook = Workbook::new(); + + let worksheet = workbook.add_worksheet(); + + worksheet.set_column_width(2, 10.288)?; + worksheet.set_column_width(3, 10.288)?; + worksheet.set_column_width(4, 10.288)?; + worksheet.set_column_width(5, 10.288)?; + worksheet.set_column_width(6, 10.288)?; + worksheet.set_column_width(7, 10.288)?; + + let table = Table::new(); + worksheet.add_table(2, 2, 12, 5, &table)?; + worksheet.add_table(14, 5, 19, 7, &table)?; + worksheet.add_table(22, 2, 29, 3, &table)?; + + worksheet.write_url_with_format(0, 0, "http://perl.com/", &Format::default())?; + worksheet.write_url_with_format(0, 2, "http://perl.com/", &Format::default())?; + + let image = Image::new("tests/input/images/blue.png")?.set_alt_text("blue.png"); + + worksheet.insert_image(3, 0, &image)?; + + worksheet.set_default_note_author("John"); + let note = Note::new("Test1"); + worksheet.insert_note(0, 7, ¬e)?; + + let note = Note::new("Test2"); + worksheet.insert_note(0, 9, ¬e)?; + + workbook.save(filename)?; + + Ok(()) +} + +#[test] +fn test_table06() { + let test_runner = common::TestRunner::new() + .set_name("table06") + // We ignore these files since the order of the strings is different + // from Excel and we are testing for rel file creation and order. + .ignore_file("xl/sharedStrings.xml") + .ignore_file("xl/worksheets/sheet1.xml") + .set_function(create_new_xlsx_file) + .initialize(); + + test_runner.assert_eq(); + test_runner.cleanup(); +} diff --git a/tests/integration/vml01.rs b/tests/integration/vml01.rs new file mode 100644 index 00000000..ccf843ec --- /dev/null +++ b/tests/integration/vml01.rs @@ -0,0 +1,40 @@ +// Test case that compares a file generated by rust_xlsxwriter with a file +// created by Excel. +// +// SPDX-License-Identifier: MIT OR Apache-2.0 +// +// Copyright 2022-2024, John McNamara, jmcnamara@cpan.org + +use crate::common; +use rust_xlsxwriter::{Button, Note, Workbook, XlsxError}; + +// Create rust_xlsxwriter file to compare against Excel file. +fn create_new_xlsx_file(filename: &str) -> Result<(), XlsxError> { + let mut workbook = Workbook::new(); + + let worksheet = workbook.add_worksheet(); + worksheet.set_default_note_author("John"); + + worksheet.write(0, 0, "Foo")?; + + let note = Note::new("Some text"); + worksheet.insert_note(1, 1, ¬e)?; + + let button = Button::new(); + worksheet.insert_button(3, 2, &button)?; + + workbook.save(filename)?; + + Ok(()) +} + +#[test] +fn test_vml01() { + let test_runner = common::TestRunner::new() + .set_name("vml01") + .set_function(create_new_xlsx_file) + .initialize(); + + test_runner.assert_eq(); + test_runner.cleanup(); +} diff --git a/tests/integration/vml02.rs b/tests/integration/vml02.rs new file mode 100644 index 00000000..bfec4d1f --- /dev/null +++ b/tests/integration/vml02.rs @@ -0,0 +1,44 @@ +// Test case that compares a file generated by rust_xlsxwriter with a file +// created by Excel. +// +// SPDX-License-Identifier: MIT OR Apache-2.0 +// +// Copyright 2022-2024, John McNamara, jmcnamara@cpan.org + +use crate::common; +use rust_xlsxwriter::{Button, Note, Workbook, XlsxError}; + +// Create rust_xlsxwriter file to compare against Excel file. +fn create_new_xlsx_file(filename: &str) -> Result<(), XlsxError> { + let mut workbook = Workbook::new(); + + let worksheet = workbook.add_worksheet(); + worksheet.set_default_note_author("John"); + + worksheet.write(0, 0, "Foo")?; + + let note = Note::new("Some text"); + worksheet.insert_note(1, 1, ¬e)?; + + let note = Note::new("More text"); + worksheet.insert_note(16, 3, ¬e)?; + + let button = Button::new(); + worksheet.insert_button(3, 2, &button)?; + worksheet.insert_button(7, 4, &button)?; + + workbook.save(filename)?; + + Ok(()) +} + +#[test] +fn test_vml02() { + let test_runner = common::TestRunner::new() + .set_name("vml02") + .set_function(create_new_xlsx_file) + .initialize(); + + test_runner.assert_eq(); + test_runner.cleanup(); +} diff --git a/tests/integration/vml03.rs b/tests/integration/vml03.rs new file mode 100644 index 00000000..0794b1ce --- /dev/null +++ b/tests/integration/vml03.rs @@ -0,0 +1,57 @@ +// Test case that compares a file generated by rust_xlsxwriter with a file +// created by Excel. +// +// SPDX-License-Identifier: MIT OR Apache-2.0 +// +// Copyright 2022-2024, John McNamara, jmcnamara@cpan.org + +use crate::common; +use rust_xlsxwriter::{Button, Note, Workbook, XlsxError}; + +// Create rust_xlsxwriter file to compare against Excel file. +fn create_new_xlsx_file(filename: &str) -> Result<(), XlsxError> { + let mut workbook = Workbook::new(); + + // Worksheet 1. + let worksheet1 = workbook.add_worksheet(); + worksheet1.set_default_note_author("John"); + worksheet1.write(0, 0, "Foo")?; + + let note = Note::new("Some text"); + worksheet1.insert_note(1, 1, ¬e)?; + + let button = Button::new(); + worksheet1.insert_button(3, 2, &button)?; + worksheet1.insert_button(7, 4, &button)?; + + // Worksheet 2. + let _worksheet2 = workbook.add_worksheet(); + + // Worksheet 3. + let worksheet3 = workbook.add_worksheet(); + worksheet3.set_default_note_author("John"); + worksheet3.write(0, 0, "Bar")?; + + let note = Note::new("More text"); + worksheet3.insert_note(6, 2, ¬e)?; + + let button = Button::new(); + worksheet3.insert_button(1, 1, &button)?; + worksheet3.insert_button(3, 2, &button)?; + worksheet3.insert_button(7, 4, &button)?; + + workbook.save(filename)?; + + Ok(()) +} + +#[test] +fn test_vml03() { + let test_runner = common::TestRunner::new() + .set_name("vml03") + .set_function(create_new_xlsx_file) + .initialize(); + + test_runner.assert_eq(); + test_runner.cleanup(); +} diff --git a/tests/integration/vml04.rs b/tests/integration/vml04.rs new file mode 100644 index 00000000..c10fabbf --- /dev/null +++ b/tests/integration/vml04.rs @@ -0,0 +1,60 @@ +// Test case that compares a file generated by rust_xlsxwriter with a file +// created by Excel. +// +// SPDX-License-Identifier: MIT OR Apache-2.0 +// +// Copyright 2022-2024, John McNamara, jmcnamara@cpan.org + +use crate::common; +use rust_xlsxwriter::{Button, Note, Workbook, XlsxError}; + +// Create rust_xlsxwriter file to compare against Excel file. +fn create_new_xlsx_file(filename: &str) -> Result<(), XlsxError> { + let mut workbook = Workbook::new(); + + // Worksheet 1. + let worksheet1 = workbook.add_worksheet(); + worksheet1.set_default_note_author("John"); + + let note = Note::new("Some text"); + + for row in 0..=127 { + for col in 0..=15 { + worksheet1.insert_note(row, col, ¬e)?; + } + } + + let button = Button::new(); + worksheet1.insert_button(1, 1, &button)?; + worksheet1.insert_button(3, 2, &button)?; + worksheet1.insert_button(5, 4, &button)?; + + // Worksheet 2. + let _worksheet2 = workbook.add_worksheet(); + + // Worksheet 3. + let worksheet3 = workbook.add_worksheet(); + worksheet3.set_default_note_author("John"); + + let note = Note::new("More text"); + worksheet3.insert_note(0, 0, ¬e)?; + + let button = Button::new(); + + worksheet3.insert_button(7, 4, &button)?; + + workbook.save(filename)?; + + Ok(()) +} + +#[test] +fn test_vml04() { + let test_runner = common::TestRunner::new() + .set_name("vml04") + .set_function(create_new_xlsx_file) + .initialize(); + + test_runner.assert_eq(); + test_runner.cleanup(); +}