mirror of
https://github.com/tfussell/xlnt.git
synced 2024-03-22 13:11:17 +08:00
improve range iterators and their tests
This commit is contained in:
parent
23f65602de
commit
5d2c75014b
|
@ -26,9 +26,11 @@
|
||||||
|
|
||||||
#include <utf8.h>
|
#include <utf8.h>
|
||||||
|
|
||||||
|
#include <xlnt/xlnt_config.hpp>
|
||||||
|
|
||||||
namespace xlnt {
|
namespace xlnt {
|
||||||
|
|
||||||
class utf8string
|
class XLNT_CLASS utf8string
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static utf8string from_utf8(const std::string &s);
|
static utf8string from_utf8(const std::string &s);
|
||||||
|
|
|
@ -47,7 +47,7 @@ public:
|
||||||
|
|
||||||
range_iterator(const range_iterator &other);
|
range_iterator(const range_iterator &other);
|
||||||
|
|
||||||
cell_vector operator*();
|
cell_vector operator*() const;
|
||||||
|
|
||||||
bool operator==(const range_iterator &other) const;
|
bool operator==(const range_iterator &other) const;
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
|
|
||||||
namespace xlnt {
|
namespace xlnt {
|
||||||
|
|
||||||
cell_vector range_iterator::operator*()
|
cell_vector range_iterator::operator*() const
|
||||||
{
|
{
|
||||||
if (order_ == major_order::row)
|
if (order_ == major_order::row)
|
||||||
{
|
{
|
||||||
|
|
|
@ -752,6 +752,163 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void test_column_major_iterators()
|
||||||
|
{
|
||||||
|
xlnt::workbook wb;
|
||||||
|
xlnt::worksheet ws(wb);
|
||||||
|
|
||||||
|
ws.append({"A1", "B1", "C1"});
|
||||||
|
ws.append({"A2", "B2", "C2"});
|
||||||
|
|
||||||
|
auto columns = ws.columns();
|
||||||
|
|
||||||
|
auto first_column = *columns.begin();
|
||||||
|
auto first_column_iter = first_column.begin();
|
||||||
|
auto first_cell = *first_column_iter;
|
||||||
|
TS_ASSERT_EQUALS(first_cell.get_value<std::string>(), "A1");
|
||||||
|
first_column_iter++;
|
||||||
|
auto second_cell = *first_column_iter;
|
||||||
|
TS_ASSERT_EQUALS(second_cell.get_value<std::string>(), "A2");
|
||||||
|
|
||||||
|
auto last_column = *(--columns.end());
|
||||||
|
auto last_column_iter = last_column.end();
|
||||||
|
last_column_iter--;
|
||||||
|
auto last_cell = *last_column_iter;
|
||||||
|
TS_ASSERT_EQUALS(last_cell.get_value<std::string>(), "C2");
|
||||||
|
last_column_iter--;
|
||||||
|
auto penultimate_cell = *last_column_iter;
|
||||||
|
TS_ASSERT_EQUALS(penultimate_cell.get_value<std::string>(), "C1");
|
||||||
|
|
||||||
|
for (auto column : columns)
|
||||||
|
{
|
||||||
|
for (auto cell : column)
|
||||||
|
{
|
||||||
|
TS_ASSERT_EQUALS(cell.get_value<std::string>(), cell.get_reference().to_string());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_reverse_column_major_iterators()
|
||||||
|
{
|
||||||
|
xlnt::workbook wb;
|
||||||
|
xlnt::worksheet ws(wb);
|
||||||
|
|
||||||
|
ws.append({"A1", "B1", "C1"});
|
||||||
|
ws.append({"A2", "B2", "C2"});
|
||||||
|
|
||||||
|
auto columns = ws.columns();
|
||||||
|
|
||||||
|
auto column_iter = columns.rbegin();
|
||||||
|
*column_iter;
|
||||||
|
/*
|
||||||
|
auto first_column_iter = first_column.rbegin();
|
||||||
|
auto &first_cell = *first_column_iter;
|
||||||
|
TS_ASSERT_EQUALS(first_cell.get_value<std::string>(), "C2");
|
||||||
|
first_column_iter++;
|
||||||
|
auto &second_cell = *first_column_iter;
|
||||||
|
TS_ASSERT_EQUALS(second_cell.get_value<std::string>(), "C1");
|
||||||
|
|
||||||
|
auto &last_column = *(--columns.rend());
|
||||||
|
auto last_column_iter = last_column.rend();
|
||||||
|
last_column_iter--;
|
||||||
|
auto &last_cell = *last_column_iter;
|
||||||
|
TS_ASSERT_EQUALS(last_cell.get_value<std::string>(), "A1");
|
||||||
|
last_column_iter--;
|
||||||
|
auto &penultimate_cell = *last_column_iter;
|
||||||
|
TS_ASSERT_EQUALS(penultimate_cell.get_value<std::string>(), "A2");
|
||||||
|
|
||||||
|
for (auto column_iter = columns.rbegin(); column_iter != columns.rend(); ++column_iter)
|
||||||
|
{
|
||||||
|
auto column = *column_iter;
|
||||||
|
|
||||||
|
for (auto cell_iter = column.rbegin(); cell_iter != column.rend(); ++cell_iter)
|
||||||
|
{
|
||||||
|
auto cell = *cell_iter;
|
||||||
|
|
||||||
|
TS_ASSERT_EQUALS(cell.get_value<std::string>(), cell.get_reference().to_string());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_const_column_major_iterators()
|
||||||
|
{
|
||||||
|
xlnt::workbook wb;
|
||||||
|
xlnt::worksheet ws(wb);
|
||||||
|
|
||||||
|
ws.append({"A1", "B1", "C1"});
|
||||||
|
ws.append({"A2", "B2", "C2"});
|
||||||
|
|
||||||
|
const xlnt::worksheet ws_const = ws;
|
||||||
|
const auto columns = ws_const.columns();
|
||||||
|
|
||||||
|
const auto first_column = *columns.begin();
|
||||||
|
auto first_column_iter = first_column.begin();
|
||||||
|
const auto first_cell = *first_column_iter;
|
||||||
|
TS_ASSERT_EQUALS(first_cell.get_value<std::string>(), "A1");
|
||||||
|
first_column_iter++;
|
||||||
|
const auto second_cell = *first_column_iter;
|
||||||
|
TS_ASSERT_EQUALS(second_cell.get_value<std::string>(), "A2");
|
||||||
|
|
||||||
|
const auto last_column = *(--columns.end());
|
||||||
|
auto last_column_iter = last_column.end();
|
||||||
|
last_column_iter--;
|
||||||
|
const auto last_cell = *last_column_iter;
|
||||||
|
TS_ASSERT_EQUALS(last_cell.get_value<std::string>(), "C2");
|
||||||
|
last_column_iter--;
|
||||||
|
const auto penultimate_cell = *last_column_iter;
|
||||||
|
TS_ASSERT_EQUALS(penultimate_cell.get_value<std::string>(), "C1");
|
||||||
|
|
||||||
|
for (const auto column : columns)
|
||||||
|
{
|
||||||
|
for (const auto cell : column)
|
||||||
|
{
|
||||||
|
TS_ASSERT_EQUALS(cell.get_value<std::string>(), cell.get_reference().to_string());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_const_reverse_column_major_iterators()
|
||||||
|
{
|
||||||
|
xlnt::workbook wb;
|
||||||
|
xlnt::worksheet ws(wb);
|
||||||
|
|
||||||
|
ws.append({"A1", "B1", "C1"});
|
||||||
|
ws.append({"A2", "B2", "C2"});
|
||||||
|
|
||||||
|
const xlnt::worksheet ws_const = ws;
|
||||||
|
const auto columns = ws_const.columns();
|
||||||
|
|
||||||
|
const auto first_column = *columns.crbegin();
|
||||||
|
auto first_column_iter = first_column.crbegin();
|
||||||
|
const auto first_cell = *first_column_iter;
|
||||||
|
TS_ASSERT_EQUALS(first_cell.get_value<std::string>(), "C2");
|
||||||
|
first_column_iter++;
|
||||||
|
const auto second_cell = *first_column_iter;
|
||||||
|
TS_ASSERT_EQUALS(second_cell.get_value<std::string>(), "C1");
|
||||||
|
|
||||||
|
const auto last_column = *(--columns.crend());
|
||||||
|
auto last_column_iter = last_column.crend();
|
||||||
|
last_column_iter--;
|
||||||
|
const auto last_cell = *last_column_iter;
|
||||||
|
TS_ASSERT_EQUALS(last_cell.get_value<std::string>(), "A1");
|
||||||
|
last_column_iter--;
|
||||||
|
const auto penultimate_cell = *last_column_iter;
|
||||||
|
TS_ASSERT_EQUALS(penultimate_cell.get_value<std::string>(), "A2");
|
||||||
|
|
||||||
|
for (auto column_iter = columns.crbegin(); column_iter != columns.crend(); ++column_iter)
|
||||||
|
{
|
||||||
|
const auto column = *column_iter;
|
||||||
|
|
||||||
|
for (auto cell_iter = column.crbegin(); cell_iter != column.crend(); ++cell_iter)
|
||||||
|
{
|
||||||
|
const auto cell = *cell_iter;
|
||||||
|
|
||||||
|
TS_ASSERT_EQUALS(cell.get_value<std::string>(), cell.get_reference().to_string());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void test_header()
|
void test_header()
|
||||||
{
|
{
|
||||||
xlnt::workbook wb;
|
xlnt::workbook wb;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user