diff --git a/tests/test_read.hpp b/tests/test_read.hpp index 94c68110..745066cf 100644 --- a/tests/test_read.hpp +++ b/tests/test_read.hpp @@ -27,156 +27,297 @@ public: TS_ASSERT_EQUALS(ws.get_cell("K9"), 0.09); } } + + xlnt::workbook standard_workbook() + { + auto path = PathHelper::GetDataDirectory("genuine/emtpy.xlsx"); + return xlnt::load_workbook(path); + } void test_read_standard_workbook() { - auto path = PathHelper::GetDataDirectory() + "/genuine/empty.xlsx"; - xlnt::workbook wb; - wb.load(path); + TS_ASSERT_DIFFERS(standard_workbook(), nullptr); } void test_read_standard_workbook_from_fileobj() { - auto path = PathHelper::GetDataDirectory() + "/genuine/empty.xlsx"; + auto path = PathHelper::GetDataDirectory("genuine/emtpy.xlsx"); std::ifstream fo(path, std::ios::binary); - xlnt::workbook wb; - wb.load(fo); + auto wb = xlnt::load_workbook(path); + TS_ASSERT_DIFFERS(standard_workbook(), nullptr); } void test_read_worksheet() { - auto path = PathHelper::GetDataDirectory() + "/genuine/empty.xlsx"; - xlnt::workbook wb; - wb.load(path); + auto wb = standard_workbook() auto sheet2 = wb.get_sheet_by_name("Sheet2 - Numbers"); TS_ASSERT_DIFFERS(sheet2, nullptr); TS_ASSERT_EQUALS("This is cell G5", sheet2.get_cell("G5")); TS_ASSERT_EQUALS(18, sheet2.get_cell("D18")); + TS_ASSERT_EQUALS(true, sheet2.get_cell("G9")); + TS_ASSERT_EQUALS(false, sheet2.get_cell("G10")); } void test_read_nostring_workbook() { - auto genuine_wb = PathHelper::GetDataDirectory() + "/genuine/empty-no-string.xlsx"; - xlnt::workbook wb; - wb.load(genuine_wb); + auto path = PathHelper::GetDataDirectory("/genuine/empty-no-string.xlsx"); + auto wb = xlnt::load_workbook(path); + TS_ASSERT_DIFFERS(standard_workbook(), nullptr); } void test_read_empty_file() { - auto null_file = PathHelper::GetDataDirectory() + "/reader/null_file.xlsx"; - xlnt::workbook wb; - TS_ASSERT_THROWS_ANYTHING(wb.load(null_file)); + auto path = PathHelper::GetDataDirectory("/reader/null_file.xlsx"; + TS_ASSERT_THROWS(xlnt::load_workbook(path), xlnt::invalid_file_exception); } - //@raises(InvalidFileException) void test_read_empty_archive() { - auto null_file = PathHelper::GetDataDirectory() + "/reader/null_archive.xlsx"; - xlnt::workbook wb; - TS_ASSERT_THROWS_ANYTHING(wb.load(null_file)); + auto path = PathHelper::GetDataDirectory("/reader/null_archive.xlsx"); + TS_ASSERT_THROWS(xlnt::load_workbook(path), xlnt::invalid_file_exception); } - - void test_read_dimension() - { - auto path = PathHelper::GetDataDirectory() + "/reader/sheet2.xml"; - std::ifstream file(path); - std::stringstream ss; - ss << file.rdbuf(); - auto dimension = xlnt::reader::read_dimension(ss.str()); - TS_ASSERT_EQUALS("D1:AA30", dimension); - } - - void test_calculate_dimension_iter() - { - auto path = PathHelper::GetDataDirectory() + "/genuine/empty.xlsx"; - xlnt::workbook wb; - wb.load(path); - auto sheet2 = wb.get_sheet_by_name("Sheet2 - Numbers"); - auto dimensions = sheet2.calculate_dimension(); - TS_ASSERT_EQUALS("D1:AA30", dimensions.to_string()); - } - - void test_get_highest_row_iter() - { - auto path = PathHelper::GetDataDirectory() + "/genuine/empty.xlsx"; - xlnt::workbook wb; - wb.load(path); - auto sheet2 = wb.get_sheet_by_name("Sheet2 - Numbers"); - auto max_row = sheet2.get_highest_row(); - TS_ASSERT_EQUALS(30, max_row); - } - + void test_read_workbook_with_no_properties() { - auto genuine_wb = PathHelper::GetDataDirectory() + "/genuine/empty_with_no_properties.xlsx"; - xlnt::workbook wb; - wb.load(genuine_wb); + auto path = PathHelper::GetDataDirectory("/reader/null_archive.xlsx"); + xlnt::load_workbook(path); } - void test_read_general_style() + void workbook_with_styles() { - //TS_ASSERT_EQUALS(worksheet_with_styles.get_cell("A1").get_style().get_number_format().get_format_code(), xlnt::number_format::format::general); + auto path = PathHelper::GetDataDirectory("/reader/empty-with-styles.xlsx"); + return xlnt::load_workbook(path); } - void test_read_date_style() + void test_read_workbook_with_styles_general() { - //TS_ASSERT_EQUALS(worksheet_with_styles.get_cell("A2").get_style().get_number_format().get_format_code(), xlnt::number_format::format::date_xlsx14); + auto wb = workbook_with_styles(); + auto ws = wb["Sheet1"]; + TS_ASSERT(ws.get_cell("A1").get_style().get_number_format().get_format_code() == xlnt::number_format::known_formats::general); } - - void test_read_number_style() + + void test_read_workbook_with_styles_date() { - //TS_ASSERT_EQUALS(worksheet_with_styles.get_cell("A3").get_style().get_number_format().get_format_code(), xlnt::number_format::format::number00); + auto wb = workbook_with_styles(); + auto ws = wb["Sheet1"]; + TS_ASSERT(ws.get_cell("A2").get_style().get_number_format().get_format_code() == xlnt::number_format::known_formats::date_xlsx14); } - - void test_read_time_style() + + void test_read_workbook_with_styles_number() { - //TS_ASSERT_EQUALS(worksheet_with_styles.get_cell("A4").get_style().get_number_format().get_format_code(), xlnt::number_format::format::date_time3); + auto wb = workbook_with_styles(); + auto ws = wb["Sheet1"]; + TS_ASSERT(ws.get_cell("A3").get_style().get_number_format().get_format_code() == xlnt::number_format::known_formats::number00); } - - void test_read_percentage_style() + + void test_read_workbook_with_styles_time() { - //TS_ASSERT_EQUALS(worksheet_with_styles.get_cell("A5").get_style().get_number_format().get_format_code(), xlnt::number_format::format::percentage00) + auto wb = workbook_with_styles(); + auto ws = wb["Sheet1"]; + TS_ASSERT(ws.get_cell("A4").get_style().get_number_format().get_format_code() == xlnt::number_format::known_formats::date_time_3); } - + + void test_read_workbook_with_styles_percentage() + { + auto wb = workbook_with_styles(); + auto ws = wb["Sheet1"]; + TS_ASSERT(ws.get_cell("A5").get_style().get_number_format().get_format_code() == xlnt::number_format::known_formats::percentage00); + } + + void date_mac_1904() + { + auto path = PathHelper::GetDataDirectory("/reader/date_1904.xlsx"); + return xlnt::load_workbook(path); + } + + void date_std_1900() + { + auto path = PathHelper::GetDataDirectory("/reader/date_1900.xlsx"); + return xlnt::load_workbook(path); + } + void test_read_win_base_date() { - //TS_ASSERT_EQUALS(win_wb.get_properties().get_excel_base_date(), CALENDAR_WINDOWS_1900); + auto wb = date_std_1900(); + TS_ASSERT_EQUALS(wb.get_properties().get_excel_base_date(), xlnt::calendar::windows_1900); } - + void test_read_mac_base_date() { - //TS_ASSERT_EQUALS(mac_wb.get_properties().get_excel_base_date(), CALENDAR_MAC_1904); - } - - void test_read_date_style_mac() - { - //TS_ASSERT_EQUALS(mac_ws.get_cell("A1").get_style().get_number_format().get_format_code(), xlnt::number_format::format::date_xlsx14); + auto wb = date_mac_1904(); + TS_ASSERT_EQUALS(wb.get_properties().get_excel_base_date(), xlnt::calendar::mac_1904); } void test_read_date_style_win() { - //TS_ASSERT_EQUALS(win_ws.get_cell("A1").get_style().get_number_format().get_format_code(), xlnt::number_format::format::date_xlsx14); + auto wb = date_std_1900(); + auto ws = wb["Sheet1"]; + TS_ASSERT_EQUALS(ws.get_cell("A1").get_style().get_number_format().get_format_code() == xlnt::number_format::known_formats::date_xlsx14); } - void test_read_date_value() + void test_read_date_style_mac() { - //auto path = PathHelper::GetDataDirectory() + "/genuine/empty-with-styles.xlsx"; - //wb_with_styles.load(path); - //worksheet_with_styles = wb_with_styles.get_sheet_by_name("Sheet1"); - - auto mac_wb_path = PathHelper::GetDataDirectory() + "/reader/date_1904.xlsx"; - xlnt::workbook mac_wb; - mac_wb.load(mac_wb_path); - auto mac_ws = mac_wb.get_sheet_by_name("Sheet1"); - - auto win_wb_path = PathHelper::GetDataDirectory() + "/reader/date_1900.xlsx"; - xlnt::workbook win_wb; - win_wb.load(win_wb_path); - auto win_ws = win_wb.get_sheet_by_name("Sheet1"); - + auto wb = date_mac_1904(); + auto ws = wb["Sheet1"]; + TS_ASSERT_EQUALS(ws.get_cell("A1").get_style().get_number_format().get_format_code() == xlnt::number_format::known_formats::date_xlsx14); + } + + void test_read_win_base_date() + { + auto wb_mac = date_mac_1904(); + auto ws_mac = wb_mac["Sheet1"]; + auto wb_win = date_win_1900(); + auto ws_win = wb_win["Sheet1"]; xlnt::datetime dt(2011, 10, 31); - TS_ASSERT_EQUALS(mac_ws.get_cell("A1"), dt); - TS_ASSERT_EQUALS(win_ws.get_cell("A1"), dt); - TS_ASSERT_EQUALS(mac_ws.get_cell("A1"), win_ws.get_cell("A1")); + TS_ASSERT_EQUALS(ws_mac.get_cell("A1"), dt); + TS_ASSERT_EQUALS(ws_win.get_cell("A1"), dt); + TS_ASSERT_EQUALS(ws_mac.get_cell("A1"), ws_win.get_cell("A1")); + } + + void test_repair_central_directory() + { + TS_ASSERT(false); + /* + std::string data_a = "foobarbaz" + xlnt::CentralDirectorySignature; + std::string data_b = "bazbarfoo12345678901234567890"; + + auto f = xlnt::repair_central_directory(data_a + data_b, true); + TS_ASSERT_EQUALS(f, data_a + data_b.substr(0, 18)); + + f = xlnt::repair_central_directory(data_b, true); + TS_ASSERT_EQUALS(f, data_b); + */ + } + + void test_read_no_theme() + { + auto path = PathHelper::GetDataDirectory("/genuine/libreoffice_nrt.xlsx"); + auto wb = xlnt::load_workbook(path); + TS_ASSERT_DIFFERS(wb, nullptr); + } + + void test_read_cell_formulae() + { + xlnt::workbook wb; + auto ws = wb.get_active_sheet(); + auto path = PathHelper::GetDataDirectory("/reader/worksheet_formula.xml"); + std::ifstream ws_stream(path); + xlnt::fast_parse(ws, ws_stream, {"", ""}, {}, 0); + + auto b1 = ws.get_cell("B1"); + TS_ASSERT_EQUALS(b1.get_data_type(), xlnt::cell::type::formula); + TS_ASSERT_EQUALS(b1, "=CONCATENATE(A1, A2)"); + + auto a6 = ws.get_cell("A6"); + TS_ASSERT_EQUALS(a6.get_data_type(), xlnt::cell::type::formula); + TS_ASSERT_EQUALS(a6, "=SUM(A4:A5)"); + } + + void test_read_complex_formulae() + { + TS_ASSERT(false); + } + + void test_data_only() + { + TS_ASSERT(false); + } + + void test_detect_worksheets() + { + TS_ASSERT(false); + } + + void test_read_rels() + { + TS_ASSERT(false); + } + + void test_read_content_types() + { + std::vector> expected = + { + {"/xl/workbook.xml", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"}, + {"/xl/worksheets/sheet1.xml", "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"}, + {"/xl/chartsheets/sheet1.xml", "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml"}, + {"/xl/worksheets/sheet2.xml", "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"}, + {"/xl/theme/theme1.xml", "application/vnd.openxmlformats-officedocument.theme+xml"}, + {"/xl/styles.xml", "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"}, + {"/xl/sharedStrings.xml", "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"}, + {"/xl/drawings/drawing1.xml", "application/vnd.openxmlformats-officedocument.drawing+xml"}, + {"/xl/charts/chart1.xml", "application/vnd.openxmlformats-officedocument.drawingml.chart+xml"}, + {"/xl/drawings/drawing2.xml", "application/vnd.openxmlformats-officedocument.drawing+xml"}, + {"/xl/charts/chart2.xml", "application/vnd.openxmlformats-officedocument.drawingml.chart+xml"}, + {"/xl/calcChain.xml", "application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml"}, + {"/docProps/core.xml", "application/vnd.openxmlformats-package.core-properties+xml"}, + {"/docProps/app.xml", "application/vnd.openxmlformats-officedocument.extended-properties+xml"} + }; + + auto path = PathHelper::GetDataDirectory("/reader/bug137.xlsx"); + xlnt::zip_file f(path); + auto result = xlnt::workbook_reader::read_conent_types(f); + + TS_ASSERT_EQUALS(result, expected); + } + + void test_read_sheets() + { + { + auto path = PathHelper::GetDataDirectory("/reader/bug137.xlsx"); + xlnt::zip_file f(path); + auto sheets = xlnt::workbook_reader::read_sheets(f); + TS_ASSERT_EQUALS(sheets["rId1"], "Chart1"); + TS_ASSERT_EQUALS(sheets["rId2"], "Sheet1"); + } + + { + auto path = PathHelper::GetDataDirectory("/reader/bug304.xlsx"); + xlnt::zip_file f(path); + auto sheets = xlnt::workbook_reader::read_sheets(f); + TS_ASSERT_EQUALS(sheets["rId1"], "Sheet1"); + TS_ASSERT_EQUALS(sheets["rId2"], "Sheet2"); + TS_ASSERT_EQUALS(sheets["rId3"], "Sheet3"); + } + } + + void test_guess_types() + { + bool guess; + xlnt::cell:type dtype; + + for(const auto &expected : {true, xlnt::cell::type::number}, {false, xlnt::cell::type::string}) + { + std::tie(guess, dtype) = expected; + auto path = PathHelper::GetDataDirectory("/genuine/guess_types.xlsx"); + auto wb = xlnt::load_workbook(path, guess); + auto ws = wb.get_active_sheet(); + TS_ASSERT_EQUALS(ws.get_cell("D2").get_data_type(), dtype); + } + } + + void test_read_autofilter() + { + auto path = PathHelper::GetDataDirectory("/reader/bug275.xlsx"); + auto wb = xlnt::load_workbook(path); + auto ws = wb.get_active_sheet(); + TS_ASSERT_EQUALS(ws.get_auto_filter.get_reference(), "A1:B6"); + } + + void test_bad_formats_xlsb() + { + auto path = PathHelper::GetDataDirectory("/genuine/a.xlsb"); + TS_ASSERT_THROWS(xlnt::load_workbook(path), xlnt::invaid_file_exception); + } + + void test_bad_formats_xls() + { + auto path = PathHelper::GetDataDirectory("/genuine/a.xls"); + TS_ASSERT_THROWS(xlnt::load_workbook(path), xlnt::invaid_file_exception); + } + + void test_bad_formats_no() + { + auto path = PathHelper::GetDataDirectory("/genuine/a.no-format"); + TS_ASSERT_THROWS(xlnt::load_workbook(path), xlnt::invaid_file_exception); } }; diff --git a/tests/test_worksheet.hpp b/tests/test_worksheet.hpp index 35b9fa65..de436233 100644 --- a/tests/test_worksheet.hpp +++ b/tests/test_worksheet.hpp @@ -12,18 +12,18 @@ public: void test_new_worksheet() { xlnt::worksheet ws = wb_.create_sheet(); - TS_ASSERT(wb_ == ws.get_parent()); + TS_ASSERT(wb_ == ws.get_parent()); } void test_new_sheet_name() { - xlnt::worksheet ws = wb_.create_sheet("TestName"); + xlnt::worksheet ws = wb_.create_sheet("TestName"); TS_ASSERT_EQUALS(ws.to_string(), ""); } void test_get_cell() { - xlnt::worksheet ws(wb_); + xlnt::worksheet ws(wb_); auto cell = ws.get_cell("A1"); TS_ASSERT_EQUALS(cell.get_reference().to_string(), "A1"); } @@ -31,7 +31,15 @@ public: void test_set_bad_title() { std::string title(50, 'X'); - TS_ASSERT_THROWS(wb_.create_sheet(title), xlnt::sheet_title_exception); + TS_ASSERT_THROWS(wb_.create_sheet(title), xlnt::sheet_title_exception); + } + + void test_increment_title() + { + auto ws1 = wb_.create_sheet("Test"); + TS_ASSERT_EQUALS(ws1.get_title(), "Test"); + auto ws2 = wb_.create_sheet("Test"); + TS_ASSERT_EQUALS(ws1.get_title(), "Test1"); } void test_set_bad_title_character() @@ -83,7 +91,7 @@ public: xlnt::worksheet ws1(wb_); xlnt::worksheet ws2(wb_); wb_.create_named_range("wrong_sheet_range", ws1, "C5"); - TS_ASSERT_THROWS_ANYTHING(ws2.get_named_range("wrong_sheet_range")); + TS_ASSERT_THROWS(ws2.get_named_range("wrong_sheet_range"), xlnt::named_range_exception); } void test_cell_offset() @@ -221,11 +229,26 @@ public: auto rows = ws.rows(); - TS_ASSERT_EQUALS(rows.num_rows(), 9); + TS_ASSERT_EQUALS(rows.length(), 9); TS_ASSERT_EQUALS(rows[0][0], "first"); TS_ASSERT_EQUALS(rows[8][2], "last"); } + + void test_cols() + { + xlnt::worksheet ws(wb_); + + ws.get_cell("A1") = "first"; + ws.get_cell("C9") = "last"; + + auto cols = ws.columns(); + + TS_ASSERT_EQUALS(cols.length(), 3); + + TS_ASSERT_EQUALS(rows[0][0], "first"); + TS_ASSERT_EQUALS(rows[2][8], "last"); + } void test_auto_filter() { @@ -241,121 +264,6 @@ public: TS_ASSERT_EQUALS(ws.get_auto_filter(), "C1:G9"); } - void test_page_margins() - { - xlnt::worksheet ws(wb_); - - ws.get_page_margins().set_left(2.0); - ws.get_page_margins().set_right(2.0); - ws.get_page_margins().set_top(2.0); - ws.get_page_margins().set_bottom(2.0); - ws.get_page_margins().set_header(1.5); - ws.get_page_margins().set_footer(1.5); - - auto xml_string = xlnt::writer::write_worksheet(ws); - pugi::xml_document doc; - doc.load(xml_string.c_str()); - - auto page_margins_node = doc.child("worksheet").child("pageMargins"); - TS_ASSERT_DIFFERS(page_margins_node.attribute("left"), nullptr); - TS_ASSERT_EQUALS(page_margins_node.attribute("left").as_double(), 2.0); - TS_ASSERT_DIFFERS(page_margins_node.attribute("right"), nullptr); - TS_ASSERT_EQUALS(page_margins_node.attribute("right").as_double(), 2.0); - TS_ASSERT_DIFFERS(page_margins_node.attribute("top"), nullptr); - TS_ASSERT_EQUALS(page_margins_node.attribute("top").as_double(), 2.0); - TS_ASSERT_DIFFERS(page_margins_node.attribute("bottom"), nullptr); - TS_ASSERT_EQUALS(page_margins_node.attribute("bottom").as_double(), 2.0); - TS_ASSERT_DIFFERS(page_margins_node.attribute("header"), nullptr); - TS_ASSERT_EQUALS(page_margins_node.attribute("header").as_double(), 1.5); - TS_ASSERT_DIFFERS(page_margins_node.attribute("footer"), nullptr); - TS_ASSERT_EQUALS(page_margins_node.attribute("footer").as_double(), 1.5); - - xlnt::worksheet ws2(wb_); - xml_string = xlnt::writer::write_worksheet(ws2); - doc.load(xml_string.c_str()); - TS_ASSERT_DIFFERS(page_margins_node.attribute("left"), nullptr); - TS_ASSERT_EQUALS(page_margins_node.attribute("left").as_double(), 0.75); - TS_ASSERT_DIFFERS(page_margins_node.attribute("right"), nullptr); - TS_ASSERT_EQUALS(page_margins_node.attribute("right").as_double(), 0.75); - TS_ASSERT_DIFFERS(page_margins_node.attribute("top"), nullptr); - TS_ASSERT_EQUALS(page_margins_node.attribute("top").as_double(), 1); - TS_ASSERT_DIFFERS(page_margins_node.attribute("bottom"), nullptr); - TS_ASSERT_EQUALS(page_margins_node.attribute("bottom").as_double(), 1); - TS_ASSERT_DIFFERS(page_margins_node.attribute("header"), nullptr); - TS_ASSERT_EQUALS(page_margins_node.attribute("header").as_double(), 0.5); - TS_ASSERT_DIFFERS(page_margins_node.attribute("footer"), nullptr); - TS_ASSERT_EQUALS(page_margins_node.attribute("footer").as_double(), 0.5); - } - - void test_merge() - { - xlnt::worksheet ws(wb_); - - std::vector string_table = {"Cell A1", "Cell B1"}; - - ws.get_cell("A1") = "Cell A1"; - ws.get_cell("B1") = "Cell B1"; - auto xml_string = xlnt::writer::write_worksheet(ws, string_table); - pugi::xml_document doc; - doc.load(xml_string.c_str()); - auto sheet_data_node = doc.child("worksheet").child("sheetData"); - auto row_node = sheet_data_node.find_child_by_attribute("row", "r", "1"); - auto cell_node = row_node.find_child_by_attribute("c", "r", "A1"); - TS_ASSERT_DIFFERS(cell_node, nullptr); - TS_ASSERT_DIFFERS(cell_node.attribute("r"), nullptr); - TS_ASSERT_EQUALS(std::string(cell_node.attribute("r").as_string()), "A1"); - TS_ASSERT_DIFFERS(cell_node.attribute("t"), nullptr); - TS_ASSERT_EQUALS(std::string(cell_node.attribute("t").as_string()), "s"); - TS_ASSERT_DIFFERS(cell_node.child("v"), nullptr); - TS_ASSERT_EQUALS(std::string(cell_node.child("v").text().as_string()), "0"); - cell_node = row_node.find_child_by_attribute("c", "r", "B1"); - TS_ASSERT_DIFFERS(cell_node, nullptr); - TS_ASSERT_DIFFERS(cell_node.attribute("r"), nullptr); - TS_ASSERT_EQUALS(std::string(cell_node.attribute("r").as_string()), "B1"); - TS_ASSERT_DIFFERS(cell_node.attribute("t"), nullptr); - TS_ASSERT_EQUALS(std::string(cell_node.attribute("t").as_string()), "s"); - TS_ASSERT_DIFFERS(cell_node.child("v"), nullptr); - TS_ASSERT_EQUALS(std::string(cell_node.child("v").text().as_string()), "1"); - - ws.merge_cells("A1:B1"); - xml_string = xlnt::writer::write_worksheet(ws, string_table); - doc.load(xml_string.c_str()); - sheet_data_node = doc.child("worksheet").child("sheetData"); - row_node = sheet_data_node.find_child_by_attribute("row", "r", "1"); - cell_node = row_node.find_child_by_attribute("c", "r", "A1"); - TS_ASSERT_DIFFERS(cell_node, nullptr); - TS_ASSERT_DIFFERS(cell_node.attribute("r"), nullptr); - TS_ASSERT_EQUALS(std::string(cell_node.attribute("r").as_string()), "A1"); - TS_ASSERT_DIFFERS(cell_node.attribute("t"), nullptr); - TS_ASSERT_EQUALS(std::string(cell_node.attribute("t").as_string()), "s"); - TS_ASSERT_DIFFERS(cell_node.child("v"), nullptr); - TS_ASSERT_EQUALS(std::string(cell_node.child("v").text().as_string()), "0"); - cell_node = row_node.find_child_by_attribute("c", "r", "B1"); - TS_ASSERT_DIFFERS(cell_node, nullptr); - TS_ASSERT_EQUALS(cell_node.child("v"), nullptr); - auto merge_node = doc.child("worksheet").child("mergeCells").child("mergeCell"); - TS_ASSERT_DIFFERS(merge_node, nullptr); - TS_ASSERT_EQUALS(std::string(merge_node.attribute("ref").as_string()), "A1:B1"); - - ws.unmerge_cells("A1:B1"); - xml_string = xlnt::writer::write_worksheet(ws, string_table); - doc.load(xml_string.c_str()); - sheet_data_node = doc.child("worksheet").child("sheetData"); - row_node = sheet_data_node.find_child_by_attribute("row", "r", "1"); - cell_node = row_node.find_child_by_attribute("c", "r", "A1"); - TS_ASSERT_DIFFERS(cell_node, nullptr); - TS_ASSERT_DIFFERS(cell_node.attribute("r"), nullptr); - TS_ASSERT_EQUALS(std::string(cell_node.attribute("r").as_string()), "A1"); - TS_ASSERT_DIFFERS(cell_node.attribute("t"), nullptr); - TS_ASSERT_EQUALS(std::string(cell_node.attribute("t").as_string()), "s"); - TS_ASSERT_DIFFERS(cell_node.child("v"), nullptr); - TS_ASSERT_EQUALS(std::string(cell_node.child("v").text().as_string()), "0"); - cell_node = row_node.find_child_by_attribute("c", "r", "B1"); - TS_ASSERT_EQUALS(cell_node, nullptr); - merge_node = doc.child("worksheet").child("mergeCells").child("mergeCell"); - TS_ASSERT_EQUALS(merge_node, nullptr); - } - void test_freeze() { xlnt::worksheet ws(wb_); @@ -373,8 +281,46 @@ public: TS_ASSERT(!ws.has_frozen_panes()); } + void test_write_empty() + { + TS_ASSERT(false); + + xlnt::worksheet ws(wb_); + + auto xml_string = xlnt::writer::write_worksheet(ws); + + pugi::xml_document doc; + doc.load(xml_string.c_str()); + } + + void test_page_margins() + { + TS_ASSERT(false); + + xlnt::worksheet ws(wb_); + + auto xml_string = xlnt::writer::write_worksheet(ws); + + pugi::xml_document doc; + doc.load(xml_string.c_str()); + } + + void test_merge() + { + TS_ASSERT(false); + + xlnt::worksheet ws(wb_); + + auto xml_string = xlnt::writer::write_worksheet(ws); + + pugi::xml_document doc; + doc.load(xml_string.c_str()); + } + void test_printer_settings() { + TS_ASSERT(false); + xlnt::worksheet ws(wb_); ws.get_page_setup().set_orientation(xlnt::page_setup::orientation::landscape); @@ -388,24 +334,116 @@ public: pugi::xml_document doc; doc.load(xml_string.c_str()); - auto page_setup_node = doc.child("worksheet").child("pageSetup"); - TS_ASSERT_DIFFERS(page_setup_node, nullptr); - TS_ASSERT_DIFFERS(page_setup_node.attribute("orientation"), nullptr); - TS_ASSERT_EQUALS(std::string(page_setup_node.attribute("orientation").as_string()), "landscape"); - TS_ASSERT_DIFFERS(page_setup_node.attribute("paperSize"), nullptr); - TS_ASSERT_EQUALS(page_setup_node.attribute("paperSize").as_int(), 3); - TS_ASSERT_DIFFERS(page_setup_node.attribute("fitToHeight"), nullptr); - TS_ASSERT_EQUALS(page_setup_node.attribute("fitToHeight").as_int(), 0); - TS_ASSERT_DIFFERS(page_setup_node.attribute("fitToWidth"), nullptr); - TS_ASSERT_EQUALS(page_setup_node.attribute("fitToWidth").as_int(), 1); - TS_ASSERT_DIFFERS(doc.child("worksheet").child("pageSetUpPr").attribute("fitToPage"), nullptr); - TS_ASSERT_EQUALS(doc.child("worksheet").child("pageSetUpPr").attribute("fitToPage").as_int(), 1); - xlnt::worksheet ws2(wb_); xml_string = xlnt::writer::write_worksheet(ws2); doc.load(xml_string.c_str()); - TS_ASSERT_EQUALS(doc.child("worksheet").child("pageSetup"), nullptr); - TS_ASSERT_EQUALS(doc.child("worksheet").child("pageSetUpPr"), nullptr); + } + + void test_header_footer() + { + auto ws = wb_.create_sheet(); + ws.get_header_footer().get_left_header().set_text("Left Header Text"); + ws.get_header_footer().get_center_header().set_text("Center Header Text"); + ws.get_header_footer().get_center_header().set_font_name("Arial,Regular"); + ws.get_header_footer().get_center_header().set_font_size(6); + ws.get_header_footer().get_center_header().set_font_color("445566"); + ws.get_header_footer().get_right_header().set_text("Right Header Text"); + ws.get_header_footer().get_right_header().set_font_name("Arial,Bold"); + ws.get_header_footer().get_right_header().set_font_size(8); + ws.get_header_footer().get_right_header().set_font_color("112233"); + ws.get_header_footer().get_left_footer().set_text("Left Footer Text\nAnd &[Date] and &[Time]"); + ws.get_header_footer().get_left_footer().set_font_name("Times New Roman,Regular"); + ws.get_header_footer().get_left_footer().set_font_size(10); + ws.get_header_footer().get_left_footer().set_font_color("445566"); + ws.get_header_footer().get_center_footer().set_text("Center Footer Text &[Path]&[File] on &[Tab]"); + ws.get_header_footer().get_center_footer().set_font_name("Times New Roman,Bold"); + ws.get_header_footer().get_center_footer().set_font_size(12); + ws.get_header_footer().get_center_footer().set_font_color("778899"); + ws.get_header_footer().get_right_footer().set_text("Right Footer Text &[Page] of &[Pages]"); + ws.get_header_footer().get_right_footer().set_font_name("Times New Roman,Italic"); + ws.get_header_footer().get_right_footer().set_font_size(14); + ws.get_header_footer().get_right_footer().set_font_color("AABBCC"); + + auto expected_xml_string = + "" + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " &L&\"Calibri,Regular\"&K000000Left Header Text&C&\"Arial,Regular\"&6&K445566Center Header Text&R&\"Arial,Bold\"&8&K112233Right Header Text" + " &L&\"Times New Roman,Regular\"&10&K445566Left Footer Text_x000D_And &D and &T&C&\"Times New Roman,Bold\"&12&K778899Center Footer Text &Z&F on &A&R&\"Times New Roman,Italic\"&14&KAABBCCRight Footer Text &P of &N" + " " + ""; + + pugi::xml_document doc; + doc.load(expected_xml_string.c_str()); + + TS_ASSERT(Helper::compare_xml(doc, xlnt::worksheet_writer::write_worksheet(ws, {}, {}))); + + auto ws = wb_.create_sheet(); + + + expected_xml_string = + "" + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + ""; + + pugi::xml_document doc; + doc.load(expected_xml_string.c_str()); + + TS_ASSERT(Helper::compare_xml(doc, xlnt::worksheet_writer::write_worksheet(ws, {}, {}))); + } + + void test_positioning_point() + { + auto ws = wb_.create_sheet(); + TS_ASSERT(false); + } + + void test_positioning_roundtrip() + { + auto ws = wb_.create_sheet(); + TS_ASSERT_EQUALS(ws.get_point_pos(ws.get_cell("A1").get_anchor()), xlnt::cell_reference("A1")); + TS_ASSERT_EQUALS(ws.get_point_pos(ws.get_cell("D52").get_anchor()), xlnt::cell_reference("D52")); + TS_ASSERT_EQUALS(ws.get_point_pos(ws.get_cell("X11").get_anchor()), xlnt::cell_reference("X11")); + } + + void test_page_setup() + { + xlnt::page_setup p; + TS_ASSERT(p.get_setup().empty()); + p.set_scale(1); + TS_ASSERT_EQUALS(p.get_setup().at("scale"), 1); + } + + void test_page_options() + { + xlnt::page_setup p; + TS_ASSERT(p.get_options().empty()); + p.set_horizontal_centered(true); + p.set_vertical_centered(true); + TS_ASSERT_EQUALS(p.get_options().at("verticalCentered"), "1"); + TS_ASSERT_EQUALS(p.get_options().at("horizontalCentered"), "1"); } private: