#pragma once #include #include #include #include #include "helpers/path_helper.hpp" class test_write_workbook : public CxxTest::TestSuite { public: void test_write_auto_filter() { xlnt::workbook wb; auto ws = wb.create_sheet(); ws.get_cell("F42").set_value("hello"); ws.get_auto_filter() = "A1:F1"; xlnt::workbook_serializer serializer(wb); auto observed = serializer.write_workbook(); auto diff = Helper::compare_xml(PathHelper::read_file("workbook_auto_filter.xml"), observed); TS_ASSERT(!diff); } void test_write_hidden_worksheet() { xlnt::workbook wb; auto ws = wb.create_sheet(); ws.set_sheet_state(xlnt::page_setup::sheet_state::hidden); wb.create_sheet(); xlnt::workbook_serializer serializer(wb); auto observed = serializer.write_workbook(); std::string expected_string = "" " " " " " " " " " " " " " " " " " " " " ""; xlnt::xml_document expected; expected.from_string(expected_string); auto diff = Helper::compare_xml(expected, observed); TS_ASSERT(!diff); } void test_write_hidden_single_worksheet() { xlnt::workbook wb; auto ws = wb.get_active_sheet(); ws.set_sheet_state(xlnt::page_setup::sheet_state::hidden); xlnt::workbook_serializer serializer(wb); TS_ASSERT_THROWS(serializer.write_workbook(), xlnt::value_error); } void test_write_empty_workbook() { xlnt::workbook wb; TemporaryFile file; xlnt::excel_serializer serializer(wb); serializer.save_workbook(file.GetFilename()); TS_ASSERT(PathHelper::FileExists(file.GetFilename())); } void test_write_virtual_workbook() { xlnt::workbook old_wb, new_wb; xlnt::excel_serializer serializer(old_wb); std::vector wb_bytes; serializer.save_virtual_workbook(wb_bytes); xlnt::excel_serializer deserializer(new_wb); deserializer.load_virtual_workbook(wb_bytes); TS_ASSERT(new_wb != nullptr); } void test_write_workbook_rels() { xlnt::workbook wb; xlnt::zip_file archive; xlnt::relationship_serializer::write_relationships(wb.get_relationships(), "xl/workbook.xml", archive); xlnt::xml_document observed; observed.from_string(archive.read("xl/workbook/_rels/workbook.xml.rels")); auto filename = "workbook.xml.rels"; auto diff = Helper::compare_xml(PathHelper::read_file(filename), observed); TS_ASSERT(!diff); } void test_write_workbook_() { xlnt::workbook wb; xlnt::workbook_serializer serializer(wb); auto observed = serializer.write_workbook(); auto filename = PathHelper::GetDataDirectory("/workbook.xml"); auto diff = Helper::compare_xml(PathHelper::read_file(filename), observed); TS_ASSERT(!diff); } void test_write_named_range() { xlnt::workbook wb; auto ws = wb.create_sheet(); wb.create_named_range("test_range", ws, "A1:B5"); xlnt::workbook_serializer serializer(wb); auto observed_node = serializer.write_named_ranges(); xlnt::xml_document observed; observed.add_child(observed_node); std::string expected = "" "'Sheet'!$A$1:$B$5" ""; auto diff = Helper::compare_xml(expected, observed); TS_ASSERT(!diff); } void test_read_workbook_code_name() { // with open(tmpl, "rb") as expected: // TS_ASSERT(read_workbook_code_name(expected.read()) == code_name } void test_write_workbook_code_name() { xlnt::workbook wb; wb.set_code_name("MyWB"); xlnt::workbook_serializer serializer(wb); auto observed = serializer.write_workbook(); std::string expected = "" " " " " " " " " " " " " " " " " " " ""; auto diff = Helper::compare_xml(expected, observed); TS_ASSERT(!diff); } void test_write_root_rels() { xlnt::workbook wb; xlnt::zip_file archive; xlnt::relationship_serializer::write_relationships(wb.get_root_relationships(), "", archive); xlnt::xml_document observed; observed.from_string(archive.read("_rels/.rels")); std::string expected = "" " " " " " " ""; auto diff = Helper::compare_xml(expected, observed); TS_ASSERT(!diff); } private: xlnt::workbook wb_; };