4 #include <QStandardItemModel>
5 #include <gtest/gtest.h>
9 void createStandardItems(QStandardItem* parent,
int rows,
int columns,
int depth,
int d_rows = 0) {
10 if (depth <= 0 ||
rows <= 0 || columns <= 0)
13 for (
int row = 0; row <
rows; ++row) {
14 QList<QStandardItem*> items;
15 for (
int column = 0; column < columns; ++column)
16 items <<
new QStandardItem(QString(
"%2: %0, %1").arg(row).arg(column).arg(depth));
17 parent->appendRow(items);
22 QStandardItemModel*
createStandardModel(QObject* parent,
int rows,
int columns,
int depth,
int d_rows = 0) {
23 QStandardItemModel* model =
new QStandardItemModel(parent);
29 ::std::ostream&
operator<<(::std::ostream& os,
const QVariant& value) {
30 return os <<
value.toString().toStdString();
34 void checkEquality(
const QAbstractItemModel* proxy_model,
const QModelIndex& proxy_parent,
35 const QAbstractItemModel* source_model,
const QModelIndex& source_parent) {
36 ASSERT_EQ(proxy_model->rowCount(proxy_parent), source_model->rowCount(source_parent));
37 ASSERT_EQ(proxy_model->columnCount(proxy_parent), source_model->columnCount(source_parent));
39 for (
int r = proxy_model->rowCount(proxy_parent) - 1;
r >= 0; --
r) {
40 for (
int c = proxy_model->columnCount(proxy_parent) - 1;
c >= 0; --
c) {
41 QModelIndex proxy_child = proxy_model->index(
r,
c, proxy_parent);
42 QModelIndex source_child = source_model->index(
r,
c, source_parent);
45 if (proxy_child.isValid() && source_child.isValid()) {
46 EXPECT_EQ(proxy_model->data(proxy_child), source_model->data(source_child));
47 EXPECT_EQ(proxy_child.row(), source_child.row());
48 EXPECT_EQ(proxy_child.column(), source_child.column());
49 EXPECT_EQ(proxy_child.internalPointer(), source_child.internalPointer());
53 checkEquality(proxy_model, proxy_child, source_model, source_child);
61 const char* new_value =
"foo";
64 proxy->connect(proxy, &T::dataChanged,
65 [&called, &src_index, new_value](
const QModelIndex& topLeft,
const QModelIndex& bottomRight) {
66 EXPECT_EQ(topLeft.row(), src_index.row());
67 EXPECT_EQ(topLeft.column(), src_index.column());
69 EXPECT_EQ(bottomRight.row(), src_index.row());
70 EXPECT_EQ(bottomRight.column(), src_index.column());
72 EXPECT_STREQ(topLeft.data().toString().toLatin1().data(), new_value);
78 proxy->disconnect(con);
82 TEST(TreeMergeModel, basics) {
90 tree.insertModel(
"M1",
m);
99 QModelIndex idx =
tree.index(0, 0);
100 ASSERT_TRUE(idx.isValid());
107 EXPECT_STREQ(idx.data().toString().toUtf8().data(),
"M1");
113 tree.insertModel(
"M2",
m);
122 idx =
tree.index(1, 0);
123 ASSERT_TRUE(idx.isValid());
130 EXPECT_STREQ(idx.data().toString().toUtf8().data(),
"M2");
141 ASSERT_TRUE(
tree.removeModel(0));
147 ASSERT_TRUE(
tree.removeModel(
m));
169 QModelIndex idx = flat.
index(0, 0);
170 ASSERT_TRUE(idx.isValid());
203 ASSERT_EQ(flat.rowCount(), 1 + 2 + 3);
209 ASSERT_EQ(flat.rowCount(), 1 + 2 + 3);
215 ASSERT_EQ(flat.rowCount(), 1 + 2 + 3);
221 ASSERT_EQ(flat.rowCount(), 1 + 2 + 3);