2016-08-06 22:40:17 +08:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <fstream>
|
|
|
|
#include <iostream>
|
|
|
|
#include <cxxtest/TestSuite.h>
|
|
|
|
|
2016-10-31 03:48:40 +08:00
|
|
|
#include <detail/vector_streambuf.hpp>
|
2016-08-06 22:40:17 +08:00
|
|
|
#include <helpers/path_helper.hpp>
|
|
|
|
#include <helpers/xml_helper.hpp>
|
|
|
|
#include <xlnt/workbook/workbook.hpp>
|
|
|
|
|
|
|
|
class test_round_trip : public CxxTest::TestSuite
|
|
|
|
{
|
|
|
|
public:
|
2016-09-08 10:39:13 +08:00
|
|
|
/// <summary>
|
|
|
|
/// Write original to a memory as an XLSX-formatted ZIP, read it from memory back to a workbook,
|
|
|
|
/// then ensure that the resulting workbook matches the original.
|
|
|
|
/// </summary>
|
|
|
|
bool round_trip_matches_wrw(const xlnt::workbook &original)
|
2016-08-06 22:40:17 +08:00
|
|
|
{
|
2016-10-31 03:48:40 +08:00
|
|
|
std::vector<std::uint8_t> original_buffer;
|
|
|
|
original.save(original_buffer);
|
2016-11-08 10:11:30 +08:00
|
|
|
original.save("b.xlsx");
|
2016-08-06 22:40:17 +08:00
|
|
|
|
2016-09-08 10:39:13 +08:00
|
|
|
xlnt::workbook resulting_workbook;
|
2016-10-31 03:48:40 +08:00
|
|
|
resulting_workbook.load(original_buffer);
|
2016-09-08 10:39:13 +08:00
|
|
|
|
2016-10-31 03:48:40 +08:00
|
|
|
std::vector<std::uint8_t> resulting_buffer;
|
|
|
|
resulting_workbook.save(resulting_buffer);
|
2016-11-08 10:11:30 +08:00
|
|
|
resulting_workbook.save("a.xlsx");
|
2016-08-06 22:40:17 +08:00
|
|
|
|
2016-10-31 03:48:40 +08:00
|
|
|
return xml_helper::xlsx_archives_match(original_buffer, resulting_buffer);
|
2016-08-06 22:40:17 +08:00
|
|
|
}
|
2016-09-08 10:39:13 +08:00
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Read file as an XLSX-formatted ZIP file in the filesystem to a workbook,
|
|
|
|
/// write the workbook back to memory, then ensure that the contents of the two files are equivalent.
|
|
|
|
/// </summary>
|
|
|
|
bool round_trip_matches_rw(const xlnt::path &original)
|
2016-08-06 22:40:17 +08:00
|
|
|
{
|
2016-10-31 03:48:40 +08:00
|
|
|
std::ifstream file_stream(original.string(), std::ios::binary);
|
|
|
|
std::vector<std::uint8_t> original_data;
|
|
|
|
|
|
|
|
{
|
|
|
|
xlnt::detail::vector_ostreambuf file_data_buffer(original_data);
|
|
|
|
std::ostream file_data_stream(&file_data_buffer);
|
|
|
|
file_data_stream << file_stream.rdbuf();
|
|
|
|
}
|
2016-09-08 10:39:13 +08:00
|
|
|
|
|
|
|
xlnt::workbook original_workbook;
|
|
|
|
original_workbook.load(original);
|
|
|
|
|
|
|
|
std::vector<std::uint8_t> buffer;
|
|
|
|
original_workbook.save(buffer);
|
2016-12-02 21:37:50 +08:00
|
|
|
original_workbook.save("a.xlsx");
|
2016-08-06 22:40:17 +08:00
|
|
|
|
2016-10-31 03:48:40 +08:00
|
|
|
return xml_helper::xlsx_archives_match(original_data, buffer);
|
2016-08-06 22:40:17 +08:00
|
|
|
}
|
|
|
|
|
2016-09-10 22:05:06 +08:00
|
|
|
void test_round_trip_minimal_wrw()
|
2016-08-06 22:40:17 +08:00
|
|
|
{
|
|
|
|
xlnt::workbook wb = xlnt::workbook::minimal();
|
2016-09-08 10:39:13 +08:00
|
|
|
TS_ASSERT(round_trip_matches_wrw(wb));
|
2016-08-06 22:40:17 +08:00
|
|
|
}
|
|
|
|
|
2016-09-10 22:05:06 +08:00
|
|
|
void test_round_trip_empty_excel_wrw()
|
2016-08-06 22:40:17 +08:00
|
|
|
{
|
|
|
|
xlnt::workbook wb = xlnt::workbook::empty_excel();
|
2016-09-08 10:39:13 +08:00
|
|
|
TS_ASSERT(round_trip_matches_wrw(wb));
|
2016-08-06 22:40:17 +08:00
|
|
|
}
|
|
|
|
|
2016-10-31 03:48:40 +08:00
|
|
|
void test_round_trip_empty_libre_office_wrw()
|
2016-08-06 22:40:17 +08:00
|
|
|
{
|
|
|
|
xlnt::workbook wb = xlnt::workbook::empty_libre_office();
|
2016-09-08 10:39:13 +08:00
|
|
|
TS_ASSERT(round_trip_matches_wrw(wb));
|
2016-08-06 22:40:17 +08:00
|
|
|
}
|
|
|
|
|
2016-11-25 21:13:55 +08:00
|
|
|
void test_round_trip_empty_numbers_wrw()
|
2016-08-06 22:40:17 +08:00
|
|
|
{
|
|
|
|
xlnt::workbook wb = xlnt::workbook::empty_numbers();
|
2016-09-08 10:39:13 +08:00
|
|
|
TS_ASSERT(round_trip_matches_wrw(wb));
|
2016-08-06 22:40:17 +08:00
|
|
|
}
|
|
|
|
|
2016-09-22 07:04:16 +08:00
|
|
|
void test_round_trip_minimal_rw()
|
|
|
|
{
|
|
|
|
auto path = path_helper::get_data_directory("8_minimal.xlsx");
|
|
|
|
TS_ASSERT(round_trip_matches_rw(path));
|
|
|
|
}
|
|
|
|
|
2016-09-08 10:39:13 +08:00
|
|
|
void test_round_trip_empty_excel_rw()
|
2016-08-06 22:40:17 +08:00
|
|
|
{
|
2016-08-16 12:23:49 +08:00
|
|
|
auto path = path_helper::get_data_directory("9_default-excel.xlsx");
|
2016-08-06 22:40:17 +08:00
|
|
|
TS_ASSERT(round_trip_matches_rw(path));
|
|
|
|
}
|
|
|
|
|
2016-09-08 10:39:13 +08:00
|
|
|
void test_round_trip_empty_libre_rw()
|
2016-08-06 22:40:17 +08:00
|
|
|
{
|
2016-08-16 12:23:49 +08:00
|
|
|
auto path = path_helper::get_data_directory("10_default-libre-office.xlsx");
|
2016-08-06 22:40:17 +08:00
|
|
|
TS_ASSERT(round_trip_matches_rw(path));
|
|
|
|
}
|
2016-09-12 02:57:34 +08:00
|
|
|
|
2016-11-25 21:13:55 +08:00
|
|
|
void test_round_trip_empty_numbers_rw()
|
|
|
|
{
|
2016-12-02 21:37:50 +08:00
|
|
|
auto path = path_helper::get_data_directory("11_default-numbers.xlsx");
|
2016-11-25 21:13:55 +08:00
|
|
|
TS_ASSERT(round_trip_matches_rw(path));
|
|
|
|
}
|
|
|
|
|
2016-09-12 02:57:34 +08:00
|
|
|
void test_round_trip_all_styles_rw()
|
|
|
|
{
|
|
|
|
auto path = path_helper::get_data_directory("13_all_styles.xlsx");
|
|
|
|
xlnt::workbook original_workbook;
|
|
|
|
original_workbook.load(path);
|
|
|
|
|
|
|
|
std::vector<std::uint8_t> buffer;
|
|
|
|
original_workbook.save(buffer);
|
2016-11-25 21:13:55 +08:00
|
|
|
TS_ASSERT(round_trip_matches_rw(path));
|
2016-09-12 02:57:34 +08:00
|
|
|
}
|
2016-08-06 22:40:17 +08:00
|
|
|
};
|