mirror of
https://github.com/tfussell/xlnt.git
synced 2024-03-22 13:11:17 +08:00
fix up comments, hyperlinks, and formulae consumption tests
This commit is contained in:
parent
1858752a13
commit
0c100e166a
|
@ -2161,17 +2161,20 @@ void xlsx_consumer::read_worksheet(const std::string &rel_id)
|
|||
expect_start_element(qn("spreadsheetml", "hyperlink"), xml::content::simple);
|
||||
|
||||
auto cell = ws.cell(parser().attribute("ref"));
|
||||
|
||||
if (parser().attribute_present(qn("r", "id")))
|
||||
{
|
||||
auto hyperlink_rel_id = parser().attribute(qn("r", "id"));
|
||||
auto hyperlink_rel = std::find_if(hyperlinks.begin(), hyperlinks.end(),
|
||||
[&](const relationship &r) { return r.id() == hyperlink_rel_id; });
|
||||
|
||||
skip_attributes({"location", "tooltip", "display"});
|
||||
|
||||
if (hyperlink_rel != hyperlinks.end())
|
||||
{
|
||||
cell.hyperlink(hyperlink_rel->target().path().string());
|
||||
}
|
||||
}
|
||||
|
||||
skip_attributes({"location", "tooltip", "display"});
|
||||
expect_end_element(qn("spreadsheetml", "hyperlink"));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,34 +10,63 @@
|
|||
class test_consume_xlsx : public CxxTest::TestSuite
|
||||
{
|
||||
public:
|
||||
void test_non_xlsx()
|
||||
{
|
||||
xlnt::workbook wb;
|
||||
const auto path = path_helper::data_directory("1_powerpoint_presentation.xlsx");
|
||||
TS_ASSERT_THROWS(wb.load(path), xlnt::invalid_file);
|
||||
}
|
||||
|
||||
void test_decrypt_agile()
|
||||
{
|
||||
xlnt::workbook wb;
|
||||
wb.load(path_helper::data_directory("11_encrypted_excel_2016.xlsx"), "secret");
|
||||
const auto path = path_helper::data_directory("5_encrypted_agile.xlsx");
|
||||
TS_ASSERT_THROWS_NOTHING(wb.load(path, "secret"));
|
||||
}
|
||||
|
||||
void test_decrypt_libre_office()
|
||||
{
|
||||
xlnt::workbook wb;
|
||||
wb.load(path_helper::data_directory("12_encrypted_libre_office.xlsx"), "secret");
|
||||
const auto path = path_helper::data_directory("6_encrypted_libre.xlsx");
|
||||
TS_ASSERT_THROWS_NOTHING(wb.load(path, "secret"));
|
||||
}
|
||||
|
||||
void test_decrypt_standard()
|
||||
{
|
||||
xlnt::workbook wb;
|
||||
wb.load(path_helper::data_directory("13_encrypted_excel_2007.xlsx"), "password");
|
||||
const auto path = path_helper::data_directory("7_encrypted_standard.xlsx");
|
||||
TS_ASSERT_THROWS_NOTHING(wb.load(path, "password"));
|
||||
}
|
||||
|
||||
void test_decrypt_numbers()
|
||||
{
|
||||
xlnt::workbook wb;
|
||||
wb.load(path_helper::data_directory("14_encrypted_numbers.xlsx"), "secret");
|
||||
const auto path = path_helper::data_directory("8_encrypted_numbers.xlsx");
|
||||
TS_ASSERT_THROWS_NOTHING(wb.load(path, "secret"));
|
||||
}
|
||||
|
||||
void test_read_unicode_filename()
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
xlnt::workbook wb;
|
||||
const auto path = LSTRING_LITERAL(XLNT_TEST_DATA_DIR) L"/9_unicode_filename_Λ.xlsx";
|
||||
wb.load(path);
|
||||
TS_ASSERT_EQUALS(wb.active_sheet().cell("A1").value<std::string>(), "unicode!");
|
||||
#endif
|
||||
|
||||
#ifndef __MINGW32__
|
||||
xlnt::workbook wb2;
|
||||
const auto path = U8STRING_LITERAL(XLNT_TEST_DATA_DIR) u8"/9_unicode_filename_Λ.xlsx";
|
||||
wb2.load(path);
|
||||
TS_ASSERT_EQUALS(wb2.active_sheet().cell("A1").value<std::string>(), "unicode!");
|
||||
#endif
|
||||
}
|
||||
|
||||
void test_comments()
|
||||
{
|
||||
xlnt::workbook wb;
|
||||
wb.load(path_helper::data_directory("15_basic_comments.xlsx"));
|
||||
const auto path = path_helper::data_directory("10_comments_hyperlinks_formulae.xlsx");
|
||||
wb.load(path);
|
||||
|
||||
auto sheet1 = wb[0];
|
||||
TS_ASSERT_EQUALS(sheet1.cell("A1").value<std::string>(), "Sheet1!A1");
|
||||
|
@ -50,28 +79,48 @@ public:
|
|||
TS_ASSERT_EQUALS(sheet2.cell("A1").comment().author(), "Microsoft Office User");
|
||||
}
|
||||
|
||||
void test_read_unicode_filename()
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
xlnt::workbook wb;
|
||||
static const std::string data_dir = STRING_LITERAL(XLNT_TEST_DATA_DIR);
|
||||
wb.load(L"data\\16_unicode_Λ.xlsx");
|
||||
TS_ASSERT_EQUALS(wb.active_sheet().cell("A1").value<std::string>(), "unicode!");
|
||||
#endif
|
||||
#ifndef __MINGW32__
|
||||
xlnt::workbook wb2;
|
||||
wb2.load(U8STRING_LITERAL(XLNT_TEST_DATA_DIR) u8"/16_unicode_Λ.xlsx");
|
||||
TS_ASSERT_EQUALS(wb2.active_sheet().cell("A1").value<std::string>(), "unicode!");
|
||||
#endif
|
||||
}
|
||||
|
||||
void test_read_hyperlink()
|
||||
{
|
||||
xlnt::workbook wb;
|
||||
wb.load(path_helper::data_directory("17_with_hyperlink.xlsx"));
|
||||
TS_ASSERT(wb.active_sheet().cell("A1").has_hyperlink());
|
||||
TS_ASSERT_EQUALS(wb.active_sheet().cell("A1").hyperlink(),
|
||||
"https://fr.wikipedia.org/wiki/Ille-et-Vilaine");
|
||||
const auto path = path_helper::data_directory("10_comments_hyperlinks_formulae.xlsx");
|
||||
wb.load(path);
|
||||
|
||||
auto ws1 = wb.sheet_by_index(0);
|
||||
TS_ASSERT_EQUALS(ws1.title(), "Sheet1");
|
||||
TS_ASSERT(ws1.cell("A4").has_hyperlink());
|
||||
TS_ASSERT_EQUALS(ws1.cell("A4").value<std::string>(), "hyperlink1");
|
||||
TS_ASSERT_EQUALS(ws1.cell("A4").hyperlink(), "https://microsoft.com/");
|
||||
TS_ASSERT(ws1.cell("A5").has_hyperlink());
|
||||
TS_ASSERT_EQUALS(ws1.cell("A5").value<std::string>(), "https://google.com/");
|
||||
TS_ASSERT_EQUALS(ws1.cell("A5").hyperlink(), "https://google.com/");
|
||||
//TS_ASSERT(ws1.cell("A6").has_hyperlink());
|
||||
TS_ASSERT_EQUALS(ws1.cell("A6").value<std::string>(), "Sheet1!A1");
|
||||
//TS_ASSERT_EQUALS(ws1.cell("A6").hyperlink(), "Sheet1!A1");
|
||||
TS_ASSERT(ws1.cell("A7").has_hyperlink());
|
||||
TS_ASSERT_EQUALS(ws1.cell("A7").value<std::string>(), "mailto:invalid@example.com?subject=important");
|
||||
TS_ASSERT_EQUALS(ws1.cell("A7").hyperlink(), "mailto:invalid@example.com?subject=important");
|
||||
|
||||
}
|
||||
|
||||
void test_read_formulae()
|
||||
{
|
||||
xlnt::workbook wb;
|
||||
const auto path = path_helper::data_directory("10_comments_hyperlinks_formulae.xlsx");
|
||||
wb.load(path);
|
||||
|
||||
auto ws1 = wb.sheet_by_index(0);
|
||||
TS_ASSERT_EQUALS(ws1.cell("C1").value<std::string>(), "ab");
|
||||
TS_ASSERT(ws1.cell("C1").has_formula());
|
||||
TS_ASSERT_EQUALS(ws1.cell("C1").formula(), "CONCATENATE(C2,C3)");
|
||||
TS_ASSERT_EQUALS(ws1.cell("C2").value<std::string>(), "a");
|
||||
TS_ASSERT_EQUALS(ws1.cell("C3").value<std::string>(), "b");
|
||||
|
||||
auto ws2 = wb.sheet_by_index(1);
|
||||
TS_ASSERT_EQUALS(ws2.cell("C1").value<int>(), 6);
|
||||
TS_ASSERT(ws2.cell("C1").has_formula());
|
||||
TS_ASSERT_EQUALS(ws2.cell("C1").formula(), "C2*C3");
|
||||
TS_ASSERT_EQUALS(ws2.cell("C2").value<int>(), 2);
|
||||
TS_ASSERT_EQUALS(ws2.cell("C3").value<int>(), 3);
|
||||
}
|
||||
|
||||
void test_read_headers_and_footers()
|
||||
|
@ -113,16 +162,4 @@ public:
|
|||
TS_ASSERT(wb.has_custom_property("Client"));
|
||||
TS_ASSERT_EQUALS(wb.custom_property("Client").get<std::string>(), "me!");
|
||||
}
|
||||
|
||||
void test_read_formulae()
|
||||
{
|
||||
xlnt::workbook wb;
|
||||
wb.load(path_helper::data_directory("22_formulae.xlsx"));
|
||||
auto ws = wb.active_sheet();
|
||||
TS_ASSERT_EQUALS(ws.cell("A1").value<int>(), 6);
|
||||
TS_ASSERT(ws.cell("A1").has_formula());
|
||||
TS_ASSERT_EQUALS(ws.cell("A1").formula(), "A2*A3");
|
||||
TS_ASSERT_EQUALS(ws.cell("A2").value<int>(), 2);
|
||||
TS_ASSERT_EQUALS(ws.cell("A3").value<int>(), 3);
|
||||
}
|
||||
};
|
||||
|
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user