aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/declarative/qdeclarativelistcompositor/tst_qdeclarativelistcompositor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/declarative/qdeclarativelistcompositor/tst_qdeclarativelistcompositor.cpp')
-rw-r--r--tests/auto/declarative/qdeclarativelistcompositor/tst_qdeclarativelistcompositor.cpp1637
1 files changed, 0 insertions, 1637 deletions
diff --git a/tests/auto/declarative/qdeclarativelistcompositor/tst_qdeclarativelistcompositor.cpp b/tests/auto/declarative/qdeclarativelistcompositor/tst_qdeclarativelistcompositor.cpp
deleted file mode 100644
index 1716bfe2c7..0000000000
--- a/tests/auto/declarative/qdeclarativelistcompositor/tst_qdeclarativelistcompositor.cpp
+++ /dev/null
@@ -1,1637 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include <qtest.h>
-#include <private/qdeclarativelistcompositor_p.h>
-
-template<typename T, int N> int lengthOf(const T (&)[N]) { return N; }
-
-typedef QDeclarativeListCompositor C;
-
-struct Range
-{
- Range() {}
- Range(void *list, int index, int count, int flags)
- : list(list), index(index), count(count), flags(flags) {}
- void *list;
- int index;
- int count;
- int flags;
-};
-
-template <typename T> struct Array
-{
- Array() : array(0), count(0) {}
- template<int N> Array(const T (&array)[N]) : array(array), count(N) {}
-
- T operator [](int index) const { return array[index]; }
-
- const T *array;
- int count;
-};
-
-typedef Array<int> IndexArray;
-typedef Array<const void *> ListArray;
-
-typedef QVector<QDeclarativeListCompositor::Remove> RemoveList;
-typedef QVector<QDeclarativeListCompositor::Insert> InsertList;
-typedef QVector<QDeclarativeListCompositor::Change> ChangeList;
-
-typedef QVector<Range> RangeList;
-
-Q_DECLARE_METATYPE(RangeList)
-Q_DECLARE_METATYPE(RemoveList)
-Q_DECLARE_METATYPE(InsertList)
-Q_DECLARE_METATYPE(ChangeList)
-Q_DECLARE_METATYPE(void *)
-Q_DECLARE_METATYPE(IndexArray)
-Q_DECLARE_METATYPE(ListArray)
-Q_DECLARE_METATYPE(C::Group)
-
-QT_BEGIN_NAMESPACE
-bool operator ==(const C::Change &left, const C::Change &right)
-{
- return left.index[3] == right.index[3]
- && left.index[2] == right.index[2]
- && left.index[1] == right.index[1]
- && left.index[0] == right.index[0]
- && left.count == right.count
- && left.groups() == right.groups()
- && left.inCache() == right.inCache()
- && (left.moveId == -1) == (right.moveId == -1);
-}
-QT_END_NAMESPACE
-
-static const C::Group Visible = C::Group(2);
-static const C::Group Selection = C::Group(3);
-
-class tst_qdeclarativelistcompositor : public QObject
-{
- Q_OBJECT
-
- enum {
- VisibleFlag = 0x04,
- SelectionFlag = 0x08
- };
-
- void populateChange(
- C::Change &change, int sIndex, int vIndex, int dIndex, int cIndex, int count, int flags, int moveId)
- {
- change.index[Selection] = sIndex;
- change.index[Visible] = vIndex;
- change.index[C::Default] = dIndex;
- change.index[C::Cache] = cIndex;
- change.count = count;
- change.flags = flags;
- change.moveId = moveId;
- }
-
- C::Remove Remove(
- int sIndex, int vIndex, int dIndex, int cIndex, int count, int flags, int moveId = -1)
- {
- C::Remove remove;
- populateChange(remove, sIndex, vIndex, dIndex, cIndex, count, flags, moveId);
- return remove;
- }
-
- C::Insert Insert(
- int sIndex, int vIndex, int dIndex, int cIndex, int count, int flags, int moveId = -1)
- {
- C::Insert insert;
- populateChange(insert, sIndex, vIndex, dIndex, cIndex, count, flags, moveId);
- return insert;
- }
-
- C::Change Change(
- int sIndex, int vIndex, int dIndex, int cIndex, int count, int flags, int moveId = -1)
- {
- C::Change change;
- populateChange(change, sIndex, vIndex, dIndex, cIndex, count, flags, moveId);
- return change;
- }
-
-private slots:
- void find_data();
- void find();
- void findInsertPosition_data();
- void findInsertPosition();
- void insert();
- void clearFlags_data();
- void clearFlags();
- void setFlags_data();
- void setFlags();
- void move_data();
- void move();
- void moveFromEnd();
- void clear();
- void listItemsInserted_data();
- void listItemsInserted();
- void listItemsRemoved_data();
- void listItemsRemoved();
- void listItemsMoved_data();
- void listItemsMoved();
- void listItemsChanged_data();
- void listItemsChanged();
-};
-
-void tst_qdeclarativelistcompositor::find_data()
-{
- QTest::addColumn<RangeList>("ranges");
- QTest::addColumn<C::Group>("startGroup");
- QTest::addColumn<int>("startIndex");
- QTest::addColumn<C::Group>("group");
- QTest::addColumn<int>("index");
- QTest::addColumn<int>("selectionIndex");
- QTest::addColumn<int>("visibleIndex");
- QTest::addColumn<int>("defaultIndex");
- QTest::addColumn<int>("cacheIndex");
- QTest::addColumn<uint>("rangeFlags");
- QTest::addColumn<int>("rangeIndex");
-
- int listA; void *a = &listA;
-
- QTest::newRow("Start")
- << (RangeList()
- << Range(a, 0, 1, int(C::PrependFlag | SelectionFlag | C::DefaultFlag | C::CacheFlag))
- << Range(a, 1, 1, int(C::AppendFlag | C::PrependFlag | C::CacheFlag))
- << Range(0, 0, 1, int(VisibleFlag| C::CacheFlag)))
- << C::Cache << 2
- << Selection << 0
- << 0 << 0 << 0 << 0
- << uint(C::PrependFlag | SelectionFlag | C::DefaultFlag | C::CacheFlag) << 0;
-}
-
-void tst_qdeclarativelistcompositor::find()
-{
- QFETCH(RangeList, ranges);
- QFETCH(C::Group, startGroup);
- QFETCH(int, startIndex);
- QFETCH(C::Group, group);
- QFETCH(int, index);
- QFETCH(int, cacheIndex);
- QFETCH(int, defaultIndex);
- QFETCH(int, visibleIndex);
- QFETCH(int, selectionIndex);
- QFETCH(uint, rangeFlags);
- QFETCH(int, rangeIndex);
-
- QDeclarativeListCompositor compositor;
- compositor.setGroupCount(4);
- compositor.setDefaultGroups(VisibleFlag | C::DefaultFlag);
-
- foreach (const Range &range, ranges)
- compositor.append(range.list, range.index, range.count, range.flags);
-
- compositor.find(startGroup, startIndex);
-
- QDeclarativeListCompositor::iterator it = compositor.find(group, index);
- QCOMPARE(it.index[C::Cache], cacheIndex);
- QCOMPARE(it.index[C::Default], defaultIndex);
- QCOMPARE(it.index[Visible], visibleIndex);
- QCOMPARE(it.index[Selection], selectionIndex);
- QCOMPARE(it->flags, rangeFlags);
- QCOMPARE(it->index, rangeIndex);
-}
-
-void tst_qdeclarativelistcompositor::findInsertPosition_data()
-{
- QTest::addColumn<RangeList>("ranges");
- QTest::addColumn<C::Group>("group");
- QTest::addColumn<int>("index");
- QTest::addColumn<int>("selectionIndex");
- QTest::addColumn<int>("visibleIndex");
- QTest::addColumn<int>("defaultIndex");
- QTest::addColumn<int>("cacheIndex");
- QTest::addColumn<uint>("rangeFlags");
- QTest::addColumn<int>("rangeIndex");
-
- int listA; void *a = &listA;
-
- QTest::newRow("Start")
- << (RangeList()
- << Range(a, 0, 1, int(C::PrependFlag | SelectionFlag | C::DefaultFlag | C::CacheFlag))
- << Range(a, 1, 1, int(C::AppendFlag | C::PrependFlag | C::CacheFlag))
- << Range(0, 0, 1, int(VisibleFlag| C::CacheFlag)))
- << Selection << 0
- << 0 << 0 << 0 << 0
- << uint(C::PrependFlag | SelectionFlag | C::DefaultFlag | C::CacheFlag) << 0;
- QTest::newRow("1")
- << (RangeList()
- << Range(a, 0, 1, int(C::PrependFlag | SelectionFlag | C::DefaultFlag | C::CacheFlag))
- << Range(a, 1, 1, int(C::AppendFlag | C::PrependFlag | C::CacheFlag))
- << Range(0, 0, 1, int(VisibleFlag| C::CacheFlag)))
- << Selection << 1
- << 1 << 0 << 1 << 1
- << uint(C::AppendFlag | C::PrependFlag | C::CacheFlag) << 1;
-}
-
-void tst_qdeclarativelistcompositor::findInsertPosition()
-{
- QFETCH(RangeList, ranges);
- QFETCH(C::Group, group);
- QFETCH(int, index);
- QFETCH(int, cacheIndex);
- QFETCH(int, defaultIndex);
- QFETCH(int, visibleIndex);
- QFETCH(int, selectionIndex);
- QFETCH(uint, rangeFlags);
- QFETCH(int, rangeIndex);
-
- QDeclarativeListCompositor compositor;
- compositor.setGroupCount(4);
- compositor.setDefaultGroups(VisibleFlag | C::DefaultFlag);
-
- foreach (const Range &range, ranges)
- compositor.append(range.list, range.index, range.count, range.flags);
-
- QDeclarativeListCompositor::insert_iterator it = compositor.findInsertPosition(group, index);
- QCOMPARE(it.index[C::Cache], cacheIndex);
- QCOMPARE(it.index[C::Default], defaultIndex);
- QCOMPARE(it.index[Visible], visibleIndex);
- QCOMPARE(it.index[Selection], selectionIndex);
- QCOMPARE(it->flags, rangeFlags);
- QCOMPARE(it->index, rangeIndex);
-}
-
-void tst_qdeclarativelistcompositor::insert()
-{
- QDeclarativeListCompositor compositor;
- compositor.setGroupCount(4);
- compositor.setDefaultGroups(VisibleFlag | C::DefaultFlag);
-
- C::iterator it;
-
- int listA; int *a = &listA;
- int listB; int *b = &listB;
- int listC; int *c = &listC;
-
- {
- compositor.append(a, 0, 12, C::AppendFlag | C::PrependFlag | C::DefaultFlag);
- const int indexes[] = {0,1,2,3,4,5,6,7,8,9,10,11};
- const int *lists[] = {a,a,a,a,a,a,a,a,a,a, a, a};
- QCOMPARE(compositor.count(C::Default), lengthOf(indexes));
- for (int i = 0; i < lengthOf(indexes); ++i) {
- it = compositor.find(C::Default, i);
- QCOMPARE(it.list<int>(), lists[i]);
- if (lists[i]) QCOMPARE(it.modelIndex(), indexes[i]);
- }
- } {
- compositor.append(b, 4, 4, C::DefaultFlag);
- const int indexes[] = {0,1,2,3,4,5,6,7,8,9,10,11,4,5,6,7};
- const int *lists[] = {a,a,a,a,a,a,a,a,a,a, a, a,b,b,b,b};
- QCOMPARE(compositor.count(C::Default), lengthOf(indexes));
- for (int i = 0; i < lengthOf(indexes); ++i) {
- it = compositor.find(C::Default, i);
- QCOMPARE(it.list<int>(), lists[i]);
- if (lists[i]) QCOMPARE(it.modelIndex(), indexes[i]);
- }
- } { // Insert at end.
- compositor.insert(
- C::Default, 16, c, 2, 2, C::DefaultFlag);
- const int indexes[] = {0,1,2,3,4,5,6,7,8,9,10,11,4,5,6,7,2,3};
- const int *lists[] = {a,a,a,a,a,a,a,a,a,a, a, a,b,b,b,b,c,c};
- QCOMPARE(compositor.count(C::Default), lengthOf(indexes));
- for (int i = 0; i < lengthOf(indexes); ++i) {
- it = compositor.find(C::Default, i);
- QCOMPARE(it.list<int>(), lists[i]);
- if (lists[i]) QCOMPARE(it.modelIndex(), indexes[i]);
- }
- } { // Insert at start
- compositor.insert(
- C::Default, 0, c, 6, 4, C::DefaultFlag);
- const int indexes[] = {6,7,8,9,0,1,2,3,4,5,6,7,8,9,10,11,4,5,6,7,2,3};
- const int *lists[] = {c,c,c,c,a,a,a,a,a,a,a,a,a,a, a, a,b,b,b,b,c,c};
- QCOMPARE(compositor.count(C::Default), lengthOf(indexes));
- for (int i = 0; i < lengthOf(indexes); ++i) {
- it = compositor.find(C::Default, i);
- QCOMPARE(it.list<int>(), lists[i]);
- if (lists[i]) QCOMPARE(it.modelIndex(), indexes[i]);
- }
- } { // Insert after static range.
- compositor.insert(
- C::Default, 4, b, 0, 8, C::AppendFlag | C::PrependFlag | C::DefaultFlag);
- const int indexes[] = {6,7,8,9,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,8,9,10,11,4,5,6,7,2,3};
- const int *lists[] = {c,c,c,c,b,b,b,b,b,b,b,b,a,a,a,a,a,a,a,a,a,a, a, a,b,b,b,b,c,c};
- QCOMPARE(compositor.count(C::Default), lengthOf(indexes));
- for (int i = 0; i < lengthOf(indexes); ++i) {
- it = compositor.find(C::Default, i);
- QCOMPARE(it.list<int>(), lists[i]);
- if (lists[i]) QCOMPARE(it.modelIndex(), indexes[i]);
- }
- } { // Insert at end of dynamic range.
- compositor.insert(
- C::Default, 12, c, 0, 4, C::AppendFlag | C::PrependFlag | C::DefaultFlag);
- const int indexes[] = {6,7,8,9,0,1,2,3,4,5,6,7,0,1,2,3,0,1,2,3,4,5,6,7,8,9,10,11,4,5,6,7,2,3};
- const int *lists[] = {c,c,c,c,b,b,b,b,b,b,b,b,c,c,c,c,a,a,a,a,a,a,a,a,a,a, a, a,b,b,b,b,c,c};
- QCOMPARE(compositor.count(C::Default), lengthOf(indexes));
- for (int i = 0; i < lengthOf(indexes); ++i) {
- it = compositor.find(C::Default, i);
- QCOMPARE(it.list<int>(), lists[i]);
- if (lists[i]) QCOMPARE(it.modelIndex(), indexes[i]);
- }
- } { // Insert into range.
- compositor.insert(
- C::Default, 8, c, 0, 4, C::AppendFlag | C::PrependFlag | C::DefaultFlag);
- const int indexes[] = {6,7,8,9,0,1,2,3,0,1,2,3,4,5,6,7,0,1,2,3,0,1,2,3,4,5,6,7,8,9,10,11,4,5,6,7,2,3};
- const int *lists[] = {c,c,c,c,b,b,b,b,c,c,c,c,b,b,b,b,c,c,c,c,a,a,a,a,a,a,a,a,a,a, a, a,b,b,b,b,c,c};
- QCOMPARE(compositor.count(C::Default), lengthOf(indexes));
- for (int i = 0; i < lengthOf(indexes); ++i) {
- it = compositor.find(C::Default, i);
- QCOMPARE(it.list<int>(), lists[i]);
- if (lists[i]) QCOMPARE(it.modelIndex(), indexes[i]);
- }
- }
-}
-
-void tst_qdeclarativelistcompositor::clearFlags_data()
-{
- QTest::addColumn<RangeList>("ranges");
- QTest::addColumn<C::Group>("group");
- QTest::addColumn<int>("index");
- QTest::addColumn<int>("count");
- QTest::addColumn<int>("flags");
- QTest::addColumn<RemoveList>("expectedRemoves");
- QTest::addColumn<IndexArray>("cacheIndexes");
- QTest::addColumn<ListArray>("cacheLists");
- QTest::addColumn<IndexArray>("defaultIndexes");
- QTest::addColumn<ListArray>("defaultLists");
- QTest::addColumn<IndexArray>("visibleIndexes");
- QTest::addColumn<ListArray>("visibleLists");
- QTest::addColumn<IndexArray>("selectionIndexes");
- QTest::addColumn<ListArray>("selectionLists");
-
- int listA; void *a = &listA;
-
- { static const int cacheIndexes[] = {0,1,2,3,4,5,6,7,8,9,10,11,0,0,0,0};
- static const void *cacheLists[] = {a,a,a,a,a,a,a,a,a,a, a, a,0,0,0,0};
- static const int defaultIndexes[] = {0,1,2,3,4,5,6,7,8,9,10,11,0,0,0,0};
- static const void *defaultLists[] = {a,a,a,a,a,a,a,a,a,a, a, a,0,0,0,0};
- static const int visibleIndexes[] = {0,1,2,3,4,5,6,7,8,9,10,11,0,0,0,0};
- static const void *visibleLists[] = {a,a,a,a,a,a,a,a,a,a, a, a,0,0,0,0};
- static const int selectionIndexes[] = {0,1,4,5,6,7,8,9,10,11,0,0,0,0};
- static const void *selectionLists[] = {a,a,a,a,a,a,a,a, a, a,0,0,0,0};
- QTest::newRow("Default, 2, 2, Selection")
- << (RangeList()
- << Range(a, 0, 12, int(C::AppendFlag | C::PrependFlag | SelectionFlag | VisibleFlag | C::DefaultFlag | C::CacheFlag))
- << Range(0, 0, 4, int(SelectionFlag | VisibleFlag | C::DefaultFlag | C::CacheFlag)))
- << C::Default << 2 << 2 << int(SelectionFlag)
- << (RemoveList()
- << Remove(2, 2, 2, 2, 2, SelectionFlag | C::CacheFlag))
- << IndexArray(cacheIndexes) << ListArray(cacheLists)
- << IndexArray(defaultIndexes) << ListArray(defaultLists)
- << IndexArray(visibleIndexes) << ListArray(visibleLists)
- << IndexArray(selectionIndexes) << ListArray(selectionLists);
- } { static const int cacheIndexes[] = {0,1,2,3,4,5,6,7,8,9,10,11,0,0,0,0};
- static const void *cacheLists[] = {a,a,a,a,a,a,a,a,a,a, a, a,0,0,0,0};
- static const int defaultIndexes[] = {0,1,2,3,4,5,6,7,8,9,10,11,0,0,0,0};
- static const void *defaultLists[] = {a,a,a,a,a,a,a,a,a,a, a, a,0,0,0,0};
- static const int visibleIndexes[] = {0,2,3,5,6,7,8,9,10,11,0,0,0,0};
- static const void *visibleLists[] = {a,a,a,a,a,a,a,a, a, a,0,0,0,0};
- static const int selectionIndexes[] = {0,1,4,5,6,7,8,9,10,11,0,0,0,0};
- static const void *selectionLists[] = {a,a,a,a,a,a,a,a, a, a,0,0,0,0};
- QTest::newRow("Selection, 1, 2, Visible")
- << (RangeList()
- << Range(a, 0, 2, int(C::PrependFlag | SelectionFlag | VisibleFlag | C::DefaultFlag | C::CacheFlag))
- << Range(a, 2, 2, int(C::PrependFlag | VisibleFlag | C::DefaultFlag | C::CacheFlag))
- << Range(a, 4, 8, int(C::AppendFlag | C::PrependFlag | SelectionFlag | VisibleFlag | C::DefaultFlag | C::CacheFlag))
- << Range(0, 0, 4, int(SelectionFlag | VisibleFlag | C::DefaultFlag | C::CacheFlag)))
- << Selection << 1 << 2 << int(VisibleFlag)
- << (RemoveList()
- << Remove(1, 1, 1, 1, 1, VisibleFlag | C::CacheFlag)
- << Remove(2, 3, 4, 4, 1, VisibleFlag | C::CacheFlag))
- << IndexArray(cacheIndexes) << ListArray(cacheLists)
- << IndexArray(defaultIndexes) << ListArray(defaultLists)
- << IndexArray(visibleIndexes) << ListArray(visibleLists)
- << IndexArray(selectionIndexes) << ListArray(selectionLists);
- } { static const int cacheIndexes[] = {0,1,2,3,4,5,6,7,8,9,10,11,0,0,0,0};
- static const void *cacheLists[] = {a,a,a,a,a,a,a,a,a,a, a, a,0,0,0,0};
- static const int defaultIndexes[] = {0,1,2,3,4,5,6,7,8,9,10,11,0,0,0};
- static const void *defaultLists[] = {a,a,a,a,a,a,a,a,a,a, a, a,0,0,0};
- static const int visibleIndexes[] = {0,2,3,5,6,7,8,9,10,11,0,0,0};
- static const void *visibleLists[] = {a,a,a,a,a,a,a,a, a, a,0,0,0};
- static const int selectionIndexes[] = {0,1,4,5,6,7,8,9,10,11,0,0,0};
- static const void *selectionLists[] = {a,a,a,a,a,a,a,a, a, a,0,0,0};
- QTest::newRow("Default, 13, 1, Prepend | Selection | Visible | Default")
- << (RangeList()
- << Range(a, 0, 1, int(C::PrependFlag | SelectionFlag | VisibleFlag | C::DefaultFlag | C::CacheFlag))
- << Range(a, 1, 1, int(C::PrependFlag | SelectionFlag | C::DefaultFlag | C::CacheFlag))
- << Range(a, 2, 2, int(C::PrependFlag | VisibleFlag | C::DefaultFlag | C::CacheFlag))
- << Range(a, 4, 1, int(C::PrependFlag | SelectionFlag | C::DefaultFlag | C::CacheFlag))
- << Range(a, 5, 7, int(C::AppendFlag | C::PrependFlag | SelectionFlag | VisibleFlag | C::DefaultFlag | C::CacheFlag))
- << Range(0, 0, 4, int(SelectionFlag | VisibleFlag | C::DefaultFlag | C::CacheFlag)))
- << C::Default << 13 << 1 << int(C::PrependFlag | SelectionFlag | VisibleFlag | C::DefaultFlag)
- << (RemoveList()
- << Remove(11, 11, 13, 13, 1, SelectionFlag | VisibleFlag | C::DefaultFlag | C::CacheFlag))
- << IndexArray(cacheIndexes) << ListArray(cacheLists)
- << IndexArray(defaultIndexes) << ListArray(defaultLists)
- << IndexArray(visibleIndexes) << ListArray(visibleLists)
- << IndexArray(selectionIndexes) << ListArray(selectionLists);
- } { static const int cacheIndexes[] = {0,1,2,3,4,5,6,7,8,9,10,0};
- static const void *cacheLists[] = {a,a,a,a,a,a,a,a,a,a, a,0};
- static const int defaultIndexes[] = {0,1,2,3,4,5,6,7,8,9,10,11,0,0,0};
- static const void *defaultLists[] = {a,a,a,a,a,a,a,a,a,a, a, a,0,0,0};
- static const int visibleIndexes[] = {0,2,3,5,6,7,8,9,10,11,0,0,0};
- static const void *visibleLists[] = {a,a,a,a,a,a,a,a, a, a,0,0,0};
- static const int selectionIndexes[] = {0,1,4,5,6,7,8,9,10,11,0,0,0};
- static const void *selectionLists[] = {a,a,a,a,a,a,a,a, a, a,0,0,0};
- QTest::newRow("Cache, 11, 4, Cache")
- << (RangeList()
- << Range(a, 0, 1, int(C::PrependFlag | SelectionFlag | VisibleFlag | C::DefaultFlag | C::CacheFlag))
- << Range(a, 1, 1, int(C::PrependFlag | SelectionFlag | C::DefaultFlag | C::CacheFlag))
- << Range(a, 2, 2, int(C::PrependFlag | VisibleFlag | C::DefaultFlag | C::CacheFlag))
- << Range(a, 4, 1, int(C::PrependFlag | SelectionFlag | C::DefaultFlag | C::CacheFlag))
- << Range(a, 5, 7, int(C::AppendFlag | C::PrependFlag | SelectionFlag | VisibleFlag | C::DefaultFlag | C::CacheFlag))
- << Range(0, 0, 1, int(C::CacheFlag))
- << Range(0, 0, 3, int(SelectionFlag | VisibleFlag | C::DefaultFlag | C::CacheFlag)))
- << C::Cache << 11 << 4 << int(C::CacheFlag)
- << (RemoveList())
- << IndexArray(cacheIndexes) << ListArray(cacheLists)
- << IndexArray(defaultIndexes) << ListArray(defaultLists)
- << IndexArray(visibleIndexes) << ListArray(visibleLists)
- << IndexArray(selectionIndexes) << ListArray(selectionLists);
- } { static const int cacheIndexes[] = {0,1,2,3,4,5,6,7,8,9,10,0};
- static const void *cacheLists[] = {a,a,a,a,a,a,a,a,a,a, a,0};
- static const int defaultIndexes[] = {0,1,2,3,4,5,6,7,8,9,10,0};
- static const void *defaultLists[] = {a,a,a,a,a,a,a,a,a,a, a,0};
- static const int visibleIndexes[] = {0,2,3,5,6,7,8,9,10,0};
- static const void *visibleLists[] = {a,a,a,a,a,a,a,a, a,0};
- static const int selectionIndexes[] = {0,1,4,5,6,7,8,9,10,0};
- static const void *selectionLists[] = {a,a,a,a,a,a,a,a, a,0};
- QTest::newRow("Default, 11, 3, Default | Visible | Selection")
- << (RangeList()
- << Range(a, 0, 1, int(C::PrependFlag | SelectionFlag | VisibleFlag | C::DefaultFlag | C::CacheFlag))
- << Range(a, 1, 1, int(C::PrependFlag | SelectionFlag | C::DefaultFlag | C::CacheFlag))
- << Range(a, 2, 2, int(C::PrependFlag | VisibleFlag | C::DefaultFlag | C::CacheFlag))
- << Range(a, 4, 1, int(C::PrependFlag | SelectionFlag | C::DefaultFlag | C::CacheFlag))
- << Range(a, 5, 6, int(C::PrependFlag | SelectionFlag | VisibleFlag | C::DefaultFlag | C::CacheFlag))
- << Range(a, 11, 1, int(C::AppendFlag | C::PrependFlag | SelectionFlag | VisibleFlag | C::DefaultFlag))
- << Range(0, 0, 2, int(SelectionFlag | VisibleFlag | C::DefaultFlag))
- << Range(0, 0, 1, int(SelectionFlag | VisibleFlag | C::DefaultFlag | C::CacheFlag)))
- << C::Default << 11 << 3 << int(C::DefaultFlag | VisibleFlag| SelectionFlag)
- << (RemoveList()
- << Remove(9, 9, 11, 11, 1, SelectionFlag | VisibleFlag | C::DefaultFlag)
- << Remove(9, 9, 11, 11, 2, SelectionFlag | VisibleFlag | C::DefaultFlag))
- << IndexArray(cacheIndexes) << ListArray(cacheLists)
- << IndexArray(defaultIndexes) << ListArray(defaultLists)
- << IndexArray(visibleIndexes) << ListArray(visibleLists)
- << IndexArray(selectionIndexes) << ListArray(selectionLists);
- }
-}
-
-void tst_qdeclarativelistcompositor::clearFlags()
-{
- QFETCH(RangeList, ranges);
- QFETCH(C::Group, group);
- QFETCH(int, index);
- QFETCH(int, count);
- QFETCH(int, flags);
- QFETCH(RemoveList, expectedRemoves);
- QFETCH(IndexArray, cacheIndexes);
- QFETCH(ListArray, cacheLists);
- QFETCH(IndexArray, defaultIndexes);
- QFETCH(ListArray, defaultLists);
- QFETCH(IndexArray, visibleIndexes);
- QFETCH(ListArray, visibleLists);
- QFETCH(IndexArray, selectionIndexes);
- QFETCH(ListArray, selectionLists);
-
- QDeclarativeListCompositor compositor;
- compositor.setGroupCount(4);
- compositor.setDefaultGroups(VisibleFlag | C::DefaultFlag);
-
- foreach (const Range &range, ranges)
- compositor.append(range.list, range.index, range.count, range.flags);
-
- QVector<C::Remove> removes;
- compositor.clearFlags(group, index, count, flags, &removes);
-
- QCOMPARE(removes, expectedRemoves);
-
- QCOMPARE(compositor.count(C::Cache), cacheIndexes.count);
- for (int i = 0; i < cacheIndexes.count; ++i) {
- C::iterator it = compositor.find(C::Cache, i);
- QCOMPARE(it->list, cacheLists[i]);
- if (cacheLists[i])
- QCOMPARE(it.modelIndex(), cacheIndexes[i]);
- }
- QCOMPARE(compositor.count(C::Default), defaultIndexes.count);
- for (int i = 0; i < defaultIndexes.count; ++i) {
- C::iterator it = compositor.find(C::Default, i);
- QCOMPARE(it->list, defaultLists[i]);
- if (defaultLists[i])
- QCOMPARE(it.modelIndex(), defaultIndexes[i]);
- }
- QCOMPARE(compositor.count(Visible), visibleIndexes.count);
- for (int i = 0; i < visibleIndexes.count; ++i) {
- C::iterator it = compositor.find(Visible, i);
- QCOMPARE(it->list, visibleLists[i]);
- if (visibleLists[i])
- QCOMPARE(it.modelIndex(), visibleIndexes[i]);
- }
- QCOMPARE(compositor.count(Selection), selectionIndexes.count);
- for (int i = 0; i < selectionIndexes.count; ++i) {
- C::iterator it = compositor.find(Selection, i);
- QCOMPARE(it->list, selectionLists[i]);
- if (selectionLists[i])
- QCOMPARE(it.modelIndex(), selectionIndexes[i]);
- }
-}
-
-void tst_qdeclarativelistcompositor::setFlags_data()
-{
- QTest::addColumn<RangeList>("ranges");
- QTest::addColumn<C::Group>("group");
- QTest::addColumn<int>("index");
- QTest::addColumn<int>("count");
- QTest::addColumn<int>("flags");
- QTest::addColumn<InsertList>("expectedInserts");
- QTest::addColumn<IndexArray>("cacheIndexes");
- QTest::addColumn<ListArray>("cacheLists");
- QTest::addColumn<IndexArray>("defaultIndexes");
- QTest::addColumn<ListArray>("defaultLists");
- QTest::addColumn<IndexArray>("visibleIndexes");
- QTest::addColumn<ListArray>("visibleLists");
- QTest::addColumn<IndexArray>("selectionIndexes");
- QTest::addColumn<ListArray>("selectionLists");
-
- int listA; void *a = &listA;
-
- { static const int cacheIndexes[] = {0,0,0,0};
- static const void *cacheLists[] = {0,0,0,0};
- static const int defaultIndexes[] = {0,1,2,3,4,5,6,7,8,9,10,11};
- static const void *defaultLists[] = {a,a,a,a,a,a,a,a,a,a, a, a};
- QTest::newRow("Default, 2, 2, Default")
- << (RangeList()
- << Range(a, 0, 12, C::DefaultFlag)
- << Range(0, 0, 4, C::CacheFlag))
- << C::Default << 2 << 2 << int(C::DefaultFlag)
- << (InsertList())
- << IndexArray(cacheIndexes) << ListArray(cacheLists)
- << IndexArray(defaultIndexes) << ListArray(defaultLists)
- << IndexArray() << ListArray()
- << IndexArray() << ListArray();
- } { static const int cacheIndexes[] = {0,0,0,0};
- static const void *cacheLists[] = {0,0,0,0};
- static const int defaultIndexes[] = {0,1,2,3,4,5,6,7,8,9,10,11};
- static const void *defaultLists[] = {a,a,a,a,a,a,a,a,a,a, a, a};
- static const int visibleIndexes[] = {2,3};
- static const void *visibleLists[] = {a,a};
- QTest::newRow("Default, 2, 2, Visible")
- << (RangeList()
- << Range(a, 0, 12, C::DefaultFlag)
- << Range(0, 0, 4, C::CacheFlag))
- << C::Default << 2 << 2 << int(VisibleFlag)
- << (InsertList()
- << Insert(0, 0, 2, 0, 2, VisibleFlag))
- << IndexArray(cacheIndexes) << ListArray(cacheLists)
- << IndexArray(defaultIndexes) << ListArray(defaultLists)
- << IndexArray(visibleIndexes) << ListArray(visibleLists)
- << IndexArray() << ListArray();
- } { static const int cacheIndexes[] = {3,6,0,0,0,0};
- static const void *cacheLists[] = {a,a,0,0,0,0};
- static const int defaultIndexes[] = {0,1,2,3,4,5,6,7,8,9,10,11};
- static const void *defaultLists[] = {a,a,a,a,a,a,a,a,a,a, a, a};
- static const int visibleIndexes[] = {2,3,6,7};
- static const void *visibleLists[] = {a,a,a,a};
- static const int selectionIndexes[] = {3,6};
- static const void *selectionLists[] = {a,a};
- QTest::newRow("Visible, 1, 2, Selection | Cache")
- << (RangeList()
- << Range(a, 0, 2, C::DefaultFlag)
- << Range(a, 2, 2, VisibleFlag | C::DefaultFlag)
- << Range(a, 4, 2, C::DefaultFlag)
- << Range(a, 6, 2, VisibleFlag | C::DefaultFlag)
- << Range(a, 8, 4, C::DefaultFlag)
- << Range(0, 0, 4, C::CacheFlag))
- << Visible << 1 << 2 << int(SelectionFlag | C::CacheFlag)
- << (InsertList()
- << Insert(0, 1, 3, 0, 1, SelectionFlag | C::CacheFlag)
- << Insert(1, 2, 6, 1, 1, SelectionFlag | C::CacheFlag))
- << IndexArray(cacheIndexes) << ListArray(cacheLists)
- << IndexArray(defaultIndexes) << ListArray(defaultLists)
- << IndexArray(visibleIndexes) << ListArray(visibleLists)
- << IndexArray(selectionIndexes) << ListArray(selectionLists);
- } { static const int cacheIndexes[] = {3,6,0,0,0,0};
- static const void *cacheLists[] = {a,a,0,0,0,0};
- static const int defaultIndexes[] = {0,1,2,3,4,5,6,7,8,9,10,11};
- static const void *defaultLists[] = {a,a,a,a,a,a,a,a,a,a, a, a};
- static const int visibleIndexes[] = {2,3,6,7,0};
- static const void *visibleLists[] = {a,a,a,a,0};
- static const int selectionIndexes[] = {3,6};
- static const void *selectionLists[] = {a,a};
- QTest::newRow("Cache, 3, 1, Visible")
- << (RangeList()
- << Range(a, 0, 2, C::DefaultFlag)
- << Range(a, 2, 1, VisibleFlag | C::DefaultFlag)
- << Range(a, 3, 1, SelectionFlag | VisibleFlag | C::DefaultFlag | C::CacheFlag)
- << Range(a, 4, 2, C::DefaultFlag)
- << Range(a, 6, 1, SelectionFlag | VisibleFlag | C::DefaultFlag | C::CacheFlag)
- << Range(a, 7, 1, VisibleFlag | C::DefaultFlag)
- << Range(a, 8, 4, C::DefaultFlag)
- << Range(0, 0, 4, C::CacheFlag))
- << C::Cache << 3 << 1 << int(VisibleFlag)
- << (InsertList()
- << Insert(2, 4, 12, 3, 1, VisibleFlag | C::CacheFlag))
- << IndexArray(cacheIndexes) << ListArray(cacheLists)
- << IndexArray(defaultIndexes) << ListArray(defaultLists)
- << IndexArray(visibleIndexes) << ListArray(visibleLists)
- << IndexArray(selectionIndexes) << ListArray(selectionLists);
- } { static const int cacheIndexes[] = {0,1,2,3,4,5,6,7,8,9,10,11};
- static const void *cacheLists[] = {a,a,a,a,a,a,a,a,a,a, a, a};
- static const int defaultIndexes[] = {0,1,2,3,4,5,6,7,8,9,10,11};
- static const void *defaultLists[] = {a,a,a,a,a,a,a,a,a,a, a, a};
- static const int visibleIndexes[] = {0,1,3,4,5,6,7,8,9,10,11};
- static const void *visibleLists[] = {a,a,a,a,a,a,a,a,a, a, a};
- static const int selectionIndexes[] = {2,6,7,8,9};
- static const void *selectionLists[] = {a,a,a,a,a};
- QTest::newRow("Existing flag, sparse selection")
- << (RangeList()
- << Range(a, 0, 2, C::PrependFlag | VisibleFlag | C::DefaultFlag | C::CacheFlag)
- << Range(a, 2, 1, C::PrependFlag | SelectionFlag | C::DefaultFlag | C::CacheFlag)
- << Range(a, 3, 3, C::PrependFlag | VisibleFlag | C::DefaultFlag | C::CacheFlag)
- << Range(a, 6, 4, C::PrependFlag | SelectionFlag | VisibleFlag | C::DefaultFlag | C::CacheFlag)
- << Range(a,10, 2, C::AppendFlag | C::PrependFlag | VisibleFlag | C::DefaultFlag | C::CacheFlag))
- << C::Cache << 3 << 1 << int(VisibleFlag)
- << InsertList()
- << IndexArray(cacheIndexes) << ListArray(cacheLists)
- << IndexArray(defaultIndexes) << ListArray(defaultLists)
- << IndexArray(visibleIndexes) << ListArray(visibleLists)
- << IndexArray(selectionIndexes) << ListArray(selectionLists);
- }
-}
-
-void tst_qdeclarativelistcompositor::setFlags()
-{
- QFETCH(RangeList, ranges);
- QFETCH(C::Group, group);
- QFETCH(int, index);
- QFETCH(int, count);
- QFETCH(int, flags);
- QFETCH(InsertList, expectedInserts);
- QFETCH(IndexArray, cacheIndexes);
- QFETCH(ListArray, cacheLists);
- QFETCH(IndexArray, defaultIndexes);
- QFETCH(ListArray, defaultLists);
- QFETCH(IndexArray, visibleIndexes);
- QFETCH(ListArray, visibleLists);
- QFETCH(IndexArray, selectionIndexes);
- QFETCH(ListArray, selectionLists);
-
- QDeclarativeListCompositor compositor;
- compositor.setGroupCount(4);
- compositor.setDefaultGroups(VisibleFlag | C::DefaultFlag);
-
- foreach (const Range &range, ranges)
- compositor.append(range.list, range.index, range.count, range.flags);
-
- QVector<C::Insert> inserts;
- compositor.setFlags(group, index, count, flags, &inserts);
-
- QCOMPARE(inserts, expectedInserts);
-
- QCOMPARE(compositor.count(C::Cache), cacheIndexes.count);
- for (int i = 0; i < cacheIndexes.count; ++i) {
- C::iterator it = compositor.find(C::Cache, i);
- QCOMPARE(it->list, cacheLists[i]);
- if (cacheLists[i])
- QCOMPARE(it.modelIndex(), cacheIndexes[i]);
- }
- QCOMPARE(compositor.count(C::Default), defaultIndexes.count);
- for (int i = 0; i < defaultIndexes.count; ++i) {
- C::iterator it = compositor.find(C::Default, i);
- QCOMPARE(it->list, defaultLists[i]);
- if (defaultLists[i])
- QCOMPARE(it.modelIndex(), defaultIndexes[i]);
- }
- QCOMPARE(compositor.count(Visible), visibleIndexes.count);
- for (int i = 0; i < visibleIndexes.count; ++i) {
- C::iterator it = compositor.find(Visible, i);
- QCOMPARE(it->list, visibleLists[i]);
- if (visibleLists[i])
- QCOMPARE(it.modelIndex(), visibleIndexes[i]);
- }
- QCOMPARE(compositor.count(Selection), selectionIndexes.count);
- for (int i = 0; i < selectionIndexes.count; ++i) {
- C::iterator it = compositor.find(Selection, i);
- QCOMPARE(it->list, selectionLists[i]);
- if (selectionLists[i])
- QCOMPARE(it.modelIndex(), selectionIndexes[i]);
- }
-}
-
-void tst_qdeclarativelistcompositor::move_data()
-{
- QTest::addColumn<RangeList>("ranges");
- QTest::addColumn<C::Group>("fromGroup");
- QTest::addColumn<int>("from");
- QTest::addColumn<C::Group>("toGroup");
- QTest::addColumn<int>("to");
- QTest::addColumn<int>("count");
- QTest::addColumn<RemoveList>("expectedRemoves");
- QTest::addColumn<InsertList>("expectedInserts");
- QTest::addColumn<IndexArray>("cacheIndexes");
- QTest::addColumn<ListArray>("cacheLists");
- QTest::addColumn<IndexArray>("defaultIndexes");
- QTest::addColumn<ListArray>("defaultLists");
- QTest::addColumn<IndexArray>("visibleIndexes");
- QTest::addColumn<ListArray>("visibleLists");
- QTest::addColumn<IndexArray>("selectionIndexes");
- QTest::addColumn<ListArray>("selectionLists");
-
- int listA; void *a = &listA;
- int listB; void *b = &listB;
- int listC; void *c = &listC;
-
- { static const int cacheIndexes[] = {0,0,0,0,2,3};
- static const void *cacheLists[] = {0,0,0,0,c,c};
- static const int defaultIndexes[] = {0,0,1,2,3,4,5,0,1,2,3,4,5,1,2,3,0,1,2,3,4,5};
- static const void *defaultLists[] = {0,a,a,a,a,a,a,b,b,b,b,b,b,0,0,0,c,c,c,c,c,c};
- QTest::newRow("15, 0, 1")
- << (RangeList()
- << Range(a, 0, 6, C::DefaultFlag)
- << Range(b, 0, 6, C::AppendFlag | C::PrependFlag | C::DefaultFlag)
- << Range(0, 0, 4, C::DefaultFlag | C::CacheFlag)
- << Range(c, 0, 2, C::PrependFlag | C::DefaultFlag)
- << Range(c, 2, 2, C::PrependFlag | C::DefaultFlag | C::CacheFlag)
- << Range(c, 4, 2, C::AppendFlag | C::PrependFlag | C::DefaultFlag))
- << C::Default << 15 << C::Default << 0 << 1
- << (RemoveList()
- << Remove(0, 0, 15, 3, 1, C::DefaultFlag | C::CacheFlag, 0))
- << (InsertList()
- << Insert(0, 0, 0, 0, 1, C::DefaultFlag | C::CacheFlag, 0))
- << IndexArray(cacheIndexes) << ListArray(cacheLists)
- << IndexArray(defaultIndexes) << ListArray(defaultLists)
- << IndexArray() << ListArray()
- << IndexArray() << ListArray();
- } { static const int cacheIndexes[] = {0,0,0,0,2,3};
- static const void *cacheLists[] = {0,0,0,0,c,c};
- static const int defaultIndexes[] = {0,1,0,1,2,3,4,5,0,1,2,3,4,5,2,3,0,1,2,3,4,5};
- static const void *defaultLists[] = {0,0,a,a,a,a,a,a,b,b,b,b,b,b,0,0,c,c,c,c,c,c};
- QTest::newRow("15, 1, 1")
- << (RangeList()
- << Range(0, 0, 1, C::DefaultFlag | C::CacheFlag)
- << Range(a, 0, 6, C::DefaultFlag)
- << Range(b, 0, 6, C::AppendFlag | C::PrependFlag | C::DefaultFlag)
- << Range(0, 0, 3, C::DefaultFlag | C::CacheFlag)
- << Range(c, 0, 2, C::PrependFlag | C::DefaultFlag)
- << Range(c, 2, 2, C::PrependFlag | C::DefaultFlag | C::CacheFlag)
- << Range(c, 4, 2, C::AppendFlag | C::PrependFlag | C::DefaultFlag))
- << C::Default << 15 << C::Default << 1 << 1
- << (RemoveList()
- << Remove(0, 0, 15, 3, 1, C::DefaultFlag | C::CacheFlag, 0))
- << (InsertList()
- << Insert(0, 0, 1, 1, 1, C::DefaultFlag | C::CacheFlag, 0))
- << IndexArray(cacheIndexes) << ListArray(cacheLists)
- << IndexArray(defaultIndexes) << ListArray(defaultLists)
- << IndexArray() << ListArray()
- << IndexArray() << ListArray();
- } { static const int cacheIndexes[] = {0,0,0,0,2,3};
- static const void *cacheLists[] = {0,0,0,0,c,c};
- static const int defaultIndexes[] = {0,1,2,0,1,3,4,5,0,1,2,3,4,5,2,3,0,1,2,3,4,5};
- static const void *defaultLists[] = {a,a,a,0,0,a,a,a,b,b,b,b,b,b,0,0,c,c,c,c,c,c};
- QTest::newRow("0, 3, 2")
- << (RangeList()
- << Range(0, 0, 2, C::DefaultFlag | C::CacheFlag)
- << Range(a, 0, 6, C::DefaultFlag)
- << Range(b, 0, 6, C::AppendFlag | C::PrependFlag | C::DefaultFlag)
- << Range(0, 0, 2, C::DefaultFlag | C::CacheFlag)
- << Range(c, 0, 2, C::PrependFlag | C::DefaultFlag)
- << Range(c, 2, 2, C::PrependFlag | C::DefaultFlag | C::CacheFlag)
- << Range(c, 4, 2, C::AppendFlag | C::PrependFlag | C::DefaultFlag))
- << C::Default << 0 << C::Default << 3 << 2
- << (RemoveList()
- << Remove(0, 0, 0, 0, 2, C::DefaultFlag | C::CacheFlag, 0))
- << (InsertList()
- << Insert(0, 0, 3, 0, 2, C::DefaultFlag | C::CacheFlag, 0))
- << IndexArray(cacheIndexes) << ListArray(cacheLists)
- << IndexArray(defaultIndexes) << ListArray(defaultLists)
- << IndexArray() << ListArray()
- << IndexArray() << ListArray();
- } { static const int cacheIndexes[] = {0,0,0,0,2,3};
- static const void *cacheLists[] = {0,0,0,0,c,c};
- static const int defaultIndexes[] = {0,5,0,1,2,3,4,5,0,1,0,1,2,2,3,3,4,1,2,3,4,5};
- static const void *defaultLists[] = {a,a,b,b,b,b,b,b,0,0,c,a,a,0,0,a,a,c,c,c,c,c};
- QTest::newRow("7, 1, 10")
- << (RangeList()
- << Range(a, 0, 3, C::DefaultFlag)
- << Range(0, 0, 2, C::DefaultFlag | C::CacheFlag)
- << Range(a, 3, 3, C::DefaultFlag)
- << Range(b, 0, 6, C::AppendFlag | C::PrependFlag | C::DefaultFlag)
- << Range(0, 0, 2, C::DefaultFlag | C::CacheFlag)
- << Range(c, 0, 2, C::PrependFlag | C::DefaultFlag)
- << Range(c, 2, 2, C::PrependFlag | C::DefaultFlag | C::CacheFlag)
- << Range(c, 4, 2, C::AppendFlag | C::PrependFlag | C::DefaultFlag))
- << C::Default << 7 << C::Default << 1 << 10
- << (RemoveList()
- << Remove(0, 0, 7, 2, 1, C::DefaultFlag, 0)
- << Remove(0, 0, 7, 2, 6, C::DefaultFlag, 1)
- << Remove(0, 0, 7, 2, 2, C::DefaultFlag | C::CacheFlag, 2)
- << Remove(0, 0, 7, 2, 1, C::DefaultFlag, 3))
- << (InsertList()
- << Insert(0, 0, 1, 0, 1, C::DefaultFlag, 0)
- << Insert(0, 0, 2, 0, 6, C::DefaultFlag, 1)
- << Insert(0, 0, 8, 0, 2, C::DefaultFlag | C::CacheFlag, 2)
- << Insert(0, 0, 10, 2, 1, C::DefaultFlag, 3))
- << IndexArray(cacheIndexes) << ListArray(cacheLists)
- << IndexArray(defaultIndexes) << ListArray(defaultLists)
- << IndexArray() << ListArray()
- << IndexArray() << ListArray();
- } { static const int cacheIndexes[] = {0,0,0,0,3,2};
- static const void *cacheLists[] = {0,0,0,0,c,c};
- static const int defaultIndexes[] = {0,5,0,1,2,3,4,5,0,1,0,1,2,2,3,3,4,3,4,5,1,2};
- static const void *defaultLists[] = {a,a,b,b,b,b,b,b,0,0,c,a,a,0,0,a,a,c,c,c,c,c};
- QTest::newRow("17, 20, 2")
- << (RangeList()
- << Range(a, 0, 1, C::DefaultFlag)
- << Range(a, 5, 1, C::DefaultFlag)
- << Range(b, 0, 6, C::DefaultFlag)
- << Range(0, 0, 2, C::DefaultFlag | C::CacheFlag)
- << Range(c, 0, 1, C::DefaultFlag)
- << Range(a, 1, 2, C::DefaultFlag)
- << Range(0, 0, 2, C::DefaultFlag | C::CacheFlag)
- << Range(a, 3, 2, C::DefaultFlag)
- << Range(b, 0, 6, C::AppendFlag | C::PrependFlag)
- << Range(c, 0, 1, C::PrependFlag)
- << Range(c, 1, 1, C::PrependFlag | C::DefaultFlag)
- << Range(c, 2, 2, C::PrependFlag | C::DefaultFlag | C::CacheFlag)
- << Range(c, 4, 2, C::AppendFlag | C::PrependFlag | C::DefaultFlag))
- << C::Default << 17 << C::Default << 20 << 2
- << (RemoveList()
- << Remove(0, 0, 17, 4, 1, C::DefaultFlag, 0)
- << Remove(0, 0, 17, 4, 1, C::DefaultFlag | C::CacheFlag, 1))
- << (InsertList()
- << Insert(0, 0, 20, 5, 1, C::DefaultFlag, 0)
- << Insert(0, 0, 21, 5, 1, C::DefaultFlag | C::CacheFlag, 1))
- << IndexArray(cacheIndexes) << ListArray(cacheLists)
- << IndexArray(defaultIndexes) << ListArray(defaultLists)
- << IndexArray() << ListArray()
- << IndexArray() << ListArray();
- } { static const int cacheIndexes[] = {8,9,10,4,11,0,1,2,3,5,6,7};
- static const void *cacheLists[] = {a,a, a,a, a,a,a,a,a,a,a,a};
- static const int defaultIndexes[] = {8,9,10,4,11,0,1,2,3,5,6,7};
- static const void *defaultLists[] = {a,a, a,a, a,a,a,a,a,a,a,a};
- static const int visibleIndexes[] = {8,9,10,4,11,0,1,2,3,5,6,7};
- static const void *visibleLists[] = {a,a, a,a, a,a,a,a,a,a,a,a};
- QTest::newRow("3, 4, 5")
- << (RangeList()
- << Range(a, 8, 4, VisibleFlag | C::DefaultFlag | C::CacheFlag)
- << Range(a, 0, 2, C::PrependFlag | VisibleFlag | C::DefaultFlag | C::CacheFlag)
- << Range(a, 2, 1, C::PrependFlag)
- << Range(a, 2, 1, VisibleFlag | C::DefaultFlag | C::CacheFlag)
- << Range(a, 3, 5, C::PrependFlag | VisibleFlag | C::DefaultFlag | C::CacheFlag)
- << Range(a, 8, 4, C::AppendFlag | C::PrependFlag))
- << C::Default << 3 << C::Default << 4 << 5
- << (RemoveList()
- << Remove(0, 3, 3, 3, 1, VisibleFlag | C::DefaultFlag | C::CacheFlag, 0)
- << Remove(0, 3, 3, 3, 2, VisibleFlag | C::DefaultFlag | C::CacheFlag, 1)
- << Remove(0, 3, 3, 3, 1, VisibleFlag | C::DefaultFlag | C::CacheFlag, 2)
- << Remove(0, 3, 3, 3, 1, VisibleFlag | C::DefaultFlag | C::CacheFlag, 3))
- << (InsertList()
- << Insert(0, 4, 4, 4, 1, VisibleFlag | C::DefaultFlag | C::CacheFlag, 0)
- << Insert(0, 5, 5, 5, 2, VisibleFlag | C::DefaultFlag | C::CacheFlag, 1)
- << Insert(0, 7, 7, 7, 1, VisibleFlag | C::DefaultFlag | C::CacheFlag, 2)
- << Insert(0, 8, 8, 8, 1, VisibleFlag | C::DefaultFlag | C::CacheFlag, 3))
- << IndexArray(cacheIndexes) << ListArray(cacheLists)
- << IndexArray(defaultIndexes) << ListArray(defaultLists)
- << IndexArray(visibleIndexes) << ListArray(visibleLists)
- << IndexArray() << ListArray();
- } { static const int cacheIndexes[] = {0,1};
- static const void *cacheLists[] = {a,a};
- static const int defaultIndexes[] = {0,1};
- static const void *defaultLists[] = {a,a};
- QTest::newRow("0, 1, 1")
- << (RangeList()
- << Range(a, 0, 1, C::PrependFlag)
- << Range(a, 1, 1, C::PrependFlag | C::DefaultFlag | C::CacheFlag)
- << Range(a, 2, 0, C::AppendFlag | C::PrependFlag)
- << Range(a, 0, 1, C::DefaultFlag | C::CacheFlag))
- << C::Default << 0 << C::Default << 1 << 1
- << (RemoveList()
- << Remove(0, 0, 0, 0, 1, C::DefaultFlag | C::CacheFlag, 0))
- << (InsertList()
- << Insert(0, 0, 1, 1, 1, C::DefaultFlag | C::CacheFlag, 0))
- << IndexArray(cacheIndexes) << ListArray(cacheLists)
- << IndexArray(defaultIndexes) << ListArray(defaultLists)
- << IndexArray() << ListArray()
- << IndexArray() << ListArray();
- }
-}
-
-void tst_qdeclarativelistcompositor::move()
-{
- QFETCH(RangeList, ranges);
- QFETCH(C::Group, fromGroup);
- QFETCH(int, from);
- QFETCH(C::Group, toGroup);
- QFETCH(int, to);
- QFETCH(int, count);
- QFETCH(RemoveList, expectedRemoves);
- QFETCH(InsertList, expectedInserts);
- QFETCH(IndexArray, cacheIndexes);
- QFETCH(ListArray, cacheLists);
- QFETCH(IndexArray, defaultIndexes);
- QFETCH(ListArray, defaultLists);
- QFETCH(IndexArray, visibleIndexes);
- QFETCH(ListArray, visibleLists);
- QFETCH(IndexArray, selectionIndexes);
- QFETCH(ListArray, selectionLists);
-
- QDeclarativeListCompositor compositor;
- compositor.setGroupCount(4);
- compositor.setDefaultGroups(VisibleFlag | C::DefaultFlag);
-
- foreach (const Range &range, ranges)
- compositor.append(range.list, range.index, range.count, range.flags);
-
- QVector<C::Remove> removes;
- QVector<C::Insert> inserts;
- compositor.move(fromGroup, from, toGroup, to, count, fromGroup, &removes, &inserts);
-
- QCOMPARE(removes, expectedRemoves);
- QCOMPARE(inserts, expectedInserts);
-
- QCOMPARE(compositor.count(C::Cache), cacheIndexes.count);
- for (int i = 0; i < cacheIndexes.count; ++i) {
- C::iterator it = compositor.find(C::Cache, i);
- QCOMPARE(it->list, cacheLists[i]);
- if (cacheLists[i])
- QCOMPARE(it.modelIndex(), cacheIndexes[i]);
- }
- QCOMPARE(compositor.count(C::Default), defaultIndexes.count);
- for (int i = 0; i < defaultIndexes.count; ++i) {
- C::iterator it = compositor.find(C::Default, i);
- QCOMPARE(it->list, defaultLists[i]);
- if (defaultLists[i])
- QCOMPARE(it.modelIndex(), defaultIndexes[i]);
- }
- QCOMPARE(compositor.count(Visible), visibleIndexes.count);
- for (int i = 0; i < visibleIndexes.count; ++i) {
- C::iterator it = compositor.find(Visible, i);
- QCOMPARE(it->list, visibleLists[i]);
- if (visibleLists[i])
- QCOMPARE(it.modelIndex(), visibleIndexes[i]);
- }
- QCOMPARE(compositor.count(Selection), selectionIndexes.count);
- for (int i = 0; i < selectionIndexes.count; ++i) {
- C::iterator it = compositor.find(Selection, i);
- QCOMPARE(it->list, selectionLists[i]);
- if (selectionLists[i])
- QCOMPARE(it.modelIndex(), selectionIndexes[i]);
- }
-}
-
-void tst_qdeclarativelistcompositor::moveFromEnd()
-{
- int listA; void *a = &listA;
-
- QDeclarativeListCompositor compositor;
- compositor.append(a, 0, 1, C::AppendFlag | C::PrependFlag | C::DefaultFlag);
-
- // Moving an item anchors it to that position.
- compositor.move(C::Default, 0, C::Default, 0, 1, C::Default);
-
- // The existing item is anchored at 0 so prepending an item to the source will append it here
- QVector<C::Insert> inserts;
- compositor.listItemsInserted(a, 0, 1, &inserts);
-
- QCOMPARE(inserts.count(), 1);
- QCOMPARE(inserts.at(0).index[1], 1);
- QCOMPARE(inserts.at(0).count, 1);
-
- C::iterator it;
- it = compositor.find(C::Default, 0);
- QCOMPARE(it.modelIndex(), 1);
-
- it = compositor.find(C::Default, 1);
- QCOMPARE(it.modelIndex(), 0);
-}
-
-void tst_qdeclarativelistcompositor::clear()
-{
- QDeclarativeListCompositor compositor;
- compositor.setGroupCount(4);
- compositor.setDefaultGroups(VisibleFlag | C::DefaultFlag);
-
- int listA; void *a = &listA;
- int listB; void *b = &listB;
-
- compositor.append(a, 0, 8, C::AppendFlag | C::PrependFlag | VisibleFlag | C::DefaultFlag);
- compositor.append(b, 4, 5, VisibleFlag | C::DefaultFlag);
- compositor.append(0, 0, 3, VisibleFlag | C::DefaultFlag | C::CacheFlag);
-
- QCOMPARE(compositor.count(C::Default), 16);
- QCOMPARE(compositor.count(Visible), 16);
- QCOMPARE(compositor.count(C::Cache), 3);
-
- compositor.clear();
- QCOMPARE(compositor.count(C::Default), 0);
- QCOMPARE(compositor.count(Visible), 0);
- QCOMPARE(compositor.count(C::Cache), 0);
-}
-
-void tst_qdeclarativelistcompositor::listItemsInserted_data()
-{
- QTest::addColumn<RangeList>("ranges");
- QTest::addColumn<void *>("list");
- QTest::addColumn<int>("index");
- QTest::addColumn<int>("count");
- QTest::addColumn<InsertList>("expectedInserts");
- QTest::addColumn<IndexArray>("cacheIndexes");
- QTest::addColumn<IndexArray>("defaultIndexes");
- QTest::addColumn<IndexArray>("visibleIndexes");
- QTest::addColumn<IndexArray>("selectionIndexes");
-
- int listA; void *a = &listA;
- int listB; void *b = &listB;
-
- { static const int defaultIndexes[] = {/*A*/0,1,5,6,/*B*/0,1,2,3,/*A*/2,3,4};
- QTest::newRow("A 10, 2")
- << (RangeList()
- << Range(a, 0, 2, C::PrependFlag | C::DefaultFlag)
- << Range(a, 2, 3, C::PrependFlag)
- << Range(a, 5, 2, C::AppendFlag | C::PrependFlag | C::DefaultFlag)
- << Range(b, 0, 4, C::DefaultFlag)
- << Range(a, 2, 3, C::DefaultFlag))
- << a << 10 << 2
- << InsertList()
- << IndexArray()
- << IndexArray(defaultIndexes)
- << IndexArray()
- << IndexArray();
- } { static const int defaultIndexes[] = {/*A*/0,1,5,6,/*B*/0,1,2,3,/*A*/2,3,4};
- QTest::newRow("B 10, 2")
- << (RangeList()
- << Range(a, 0, 2, C::PrependFlag | C::DefaultFlag)
- << Range(a, 2, 3, C::PrependFlag)
- << Range(a, 5, 2, C::AppendFlag | C::PrependFlag | C::DefaultFlag)
- << Range(b, 0, 4, C::DefaultFlag)
- << Range(a, 2, 3, C::DefaultFlag))
- << b << 10 << 2
- << InsertList()
- << IndexArray()
- << IndexArray(defaultIndexes)
- << IndexArray()
- << IndexArray();
- } { static const int defaultIndexes[] = {/*A*/0,1,2,3,7,8,/*B*/0,1,2,3,/*A*/4,5,6};
- static const int visibleIndexes[] = {/*A*/0,1};
- QTest::newRow("A 0, 2")
- << (RangeList()
- << Range(a, 0, 2, C::PrependFlag | C::DefaultFlag)
- << Range(a, 2, 3, C::PrependFlag)
- << Range(a, 5, 2, C::AppendFlag | C::PrependFlag | C::DefaultFlag)
- << Range(b, 0, 4, C::DefaultFlag)
- << Range(a, 2, 3, C::DefaultFlag))
- << a << 0 << 2
- << (InsertList()
- << Insert(0, 0, 0, 0, 2, VisibleFlag | C::DefaultFlag))
- << IndexArray()
- << IndexArray(defaultIndexes)
- << IndexArray(visibleIndexes)
- << IndexArray();
- } { static const int defaultIndexes[] = {/*A*/0,1,2,3,5,8,9,/*B*/0,1,2,3,/*A*/4,6,7};
- static const int visibleIndexes[] = {/*A*/0,1,5};
- QTest::newRow("A 5, 1")
- << (RangeList()
- << Range(a, 0, 2, C::PrependFlag | VisibleFlag | C::DefaultFlag)
- << Range(a, 2, 2, C::PrependFlag | C::DefaultFlag)
- << Range(a, 4, 3, C::PrependFlag)
- << Range(a, 7, 2, C::AppendFlag | C::PrependFlag | C::DefaultFlag)
- << Range(b, 0, 4, C::DefaultFlag)
- << Range(a, 4, 3, C::DefaultFlag))
- << a << 5 << 1
- << (InsertList()
- << Insert(0, 2, 4, 0, 1, VisibleFlag | C::DefaultFlag))
- << IndexArray()
- << IndexArray(defaultIndexes)
- << IndexArray(visibleIndexes)
- << IndexArray();
- } { static const int defaultIndexes[] = {/*A*/0,1,2,3,5,8,9,10,11,/*B*/0,1,2,3,/*A*/4,6,7};
- static const int visibleIndexes[] = {/*A*/0,1,5,10,11};
- QTest::newRow("A 10, 2")
- << (RangeList()
- << Range(a, 0, 2, C::PrependFlag | VisibleFlag | C::DefaultFlag)
- << Range(a, 2, 2, C::PrependFlag | C::DefaultFlag)
- << Range(a, 4, 1, C::PrependFlag)
- << Range(a, 5, 1, C::PrependFlag | VisibleFlag | C::DefaultFlag)
- << Range(a, 6, 2, C::PrependFlag)
- << Range(a, 8, 2, C::AppendFlag | C::PrependFlag | C::DefaultFlag)
- << Range(b, 0, 4, C::DefaultFlag)
- << Range(a, 4, 1, C::DefaultFlag)
- << Range(a, 6, 2, C::DefaultFlag))
- << a << 10 << 2
- << (InsertList()
- << Insert(0, 3, 7, 0, 2, VisibleFlag | C::DefaultFlag))
- << IndexArray()
- << IndexArray(defaultIndexes)
- << IndexArray(visibleIndexes)
- << IndexArray();
- } { static const int cacheIndexes[] = {/*A*/0,1,-1,-1,-1,2,5,6,7,8,9};
- static const int defaultIndexes[] = {/*A*/0,1,2,3,4,5,6,7,8,9};
- static const int visibleIndexes[] = {/*A*/3,4};
- QTest::newRow("Insert after remove")
- << (RangeList()
- << Range(a, 0, 2, C::PrependFlag | C::DefaultFlag | C::CacheFlag)
- << Range(a, 2, 3, C::CacheFlag)
- << Range(a, 2, 6, C::AppendFlag | C::PrependFlag | C::DefaultFlag | C::CacheFlag))
- << a << 3 << 2
- << (InsertList()
- << Insert(0, 0, 3, 6, 2, VisibleFlag | C::DefaultFlag))
- << IndexArray(cacheIndexes)
- << IndexArray(defaultIndexes)
- << IndexArray(visibleIndexes)
- << IndexArray();
- } { static const int cacheIndexes[] = {/*A*/0,1,2,3,4};
- static const int defaultIndexes[] = {/*A*/0,1,2,3,4,5,6};
- static const int visibleIndexes[] = {/*A*/0,1,2,3,4,5,6};
- QTest::newRow("Consecutive appends")
- << (RangeList()
- << Range(a, 0, 5, C::PrependFlag | VisibleFlag | C::DefaultFlag | C::CacheFlag)
- << Range(a, 5, 1, C::PrependFlag | VisibleFlag | C::DefaultFlag)
- << Range(a, 6, 0, C::AppendFlag | VisibleFlag | C::PrependFlag | C::DefaultFlag | C::CacheFlag))
- << a << 6 << 1
- << (InsertList()
- << Insert(0, 6, 6, 5, 1, VisibleFlag | C::DefaultFlag))
- << IndexArray(cacheIndexes)
- << IndexArray(defaultIndexes)
- << IndexArray(visibleIndexes)
- << IndexArray();
- }
-}
-
-void tst_qdeclarativelistcompositor::listItemsInserted()
-{
- QFETCH(RangeList, ranges);
- QFETCH(void *, list);
- QFETCH(int, index);
- QFETCH(int, count);
- QFETCH(InsertList, expectedInserts);
- QFETCH(IndexArray, cacheIndexes);
- QFETCH(IndexArray, defaultIndexes);
- QFETCH(IndexArray, visibleIndexes);
- QFETCH(IndexArray, selectionIndexes);
-
- QDeclarativeListCompositor compositor;
- compositor.setGroupCount(4);
- compositor.setDefaultGroups(VisibleFlag | C::DefaultFlag);
-
- foreach (const Range &range, ranges)
- compositor.append(range.list, range.index, range.count, range.flags);
-
- QVector<C::Insert> inserts;
- compositor.listItemsInserted(list, index, count, &inserts);
-
- QCOMPARE(inserts, expectedInserts);
-
- QCOMPARE(compositor.count(C::Cache), cacheIndexes.count);
- for (int i = 0; i < cacheIndexes.count; ++i) {
- if (cacheIndexes[i] != -1) {
- QCOMPARE(compositor.find(C::Cache, i).modelIndex(), cacheIndexes[i]);
- }
- }
- QCOMPARE(compositor.count(C::Default), defaultIndexes.count);
- for (int i = 0; i < defaultIndexes.count; ++i) {
- if (defaultIndexes[i] != -1) {
- QCOMPARE(compositor.find(C::Default, i).modelIndex(), defaultIndexes[i]);
- }
- }
- QCOMPARE(compositor.count(Visible), visibleIndexes.count);
- for (int i = 0; i < visibleIndexes.count; ++i) {
- if (visibleIndexes[i] != -1) {
- QCOMPARE(compositor.find(Visible, i).modelIndex(), visibleIndexes[i]);
- }
- }
- QCOMPARE(compositor.count(Selection), selectionIndexes.count);
- for (int i = 0; i < selectionIndexes.count; ++i) {
- if (selectionIndexes[i] != -1) {
- QCOMPARE(compositor.find(Selection, i).modelIndex(), selectionIndexes[i]);
- }
- }
-}
-
-void tst_qdeclarativelistcompositor::listItemsRemoved_data()
-{
- QTest::addColumn<RangeList>("ranges");
- QTest::addColumn<void *>("list");
- QTest::addColumn<int>("index");
- QTest::addColumn<int>("count");
- QTest::addColumn<RemoveList>("expectedRemoves");
- QTest::addColumn<IndexArray>("cacheIndexes");
- QTest::addColumn<IndexArray>("defaultIndexes");
- QTest::addColumn<IndexArray>("visibleIndexes");
- QTest::addColumn<IndexArray>("selectionIndexes");
-
- int listA; void *a = &listA;
- int listB; void *b = &listB;
-
- { static const int defaultIndexes[] = {/*A*/0,1,5,6,/*B*/0,1,2,3,/*A*/2,3,4};
- QTest::newRow("12, 2")
- << (RangeList()
- << Range(a, 0, 2, C::PrependFlag | C::DefaultFlag)
- << Range(a, 2, 3, C::PrependFlag)
- << Range(a, 5, 2, C::AppendFlag | C::PrependFlag | C::DefaultFlag)
- << Range(b, 0, 4, C::DefaultFlag)
- << Range(a, 2, 3, C::DefaultFlag))
- << a << 12 << 2
- << RemoveList()
- << IndexArray()
- << IndexArray(defaultIndexes)
- << IndexArray()
- << IndexArray();
- } { static const int defaultIndexes[] = {/*A*/0,1,/*B*/0,1,2,3,/*A*/2,3};
- QTest::newRow("4, 3")
- << (RangeList()
- << Range(a, 0, 2, C::PrependFlag | C::DefaultFlag)
- << Range(a, 2, 3, C::PrependFlag)
- << Range(a, 5, 2, C::AppendFlag | C::PrependFlag | C::DefaultFlag)
- << Range(b, 0, 4, C::DefaultFlag)
- << Range(a, 2, 3, C::DefaultFlag))
- << a << 4 << 3
- << (RemoveList()
- << Remove(0, 0, 2, 0, 2, C::DefaultFlag)
- << Remove(0, 0, 8, 0, 1, C::DefaultFlag))
- << IndexArray()
- << IndexArray(defaultIndexes)
- << IndexArray()
- << IndexArray();
- } { static const int cacheIndexes[] = {/*A*/0,1,-1,-1,-1,2,-1,-1,3,4,5};
- static const int defaultIndexes[] = {/*A*/0,1,2,3,4,5};
- QTest::newRow("Remove after remove")
- << (RangeList()
- << Range(a, 0, 2, C::PrependFlag | C::DefaultFlag | C::CacheFlag)
- << Range(a, 2, 3, C::CacheFlag)
- << Range(a, 2, 6, C::AppendFlag | C::PrependFlag | C::DefaultFlag | C::CacheFlag))
- << a << 3 << 2
- << (RemoveList()
- << Remove(0, 0, 3, 6, 2, C::DefaultFlag | C::CacheFlag))
- << IndexArray(cacheIndexes)
- << IndexArray(defaultIndexes)
- << IndexArray()
- << IndexArray();
- } { static const int cacheIndexes[] = {/*A*/-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1};
- static const int defaultIndexes[] = {/*A*/0,1,2,3,4,5,6};
- QTest::newRow("Sparse remove")
- << (RangeList()
- << Range(a, 0, 2, C::CacheFlag)
- << Range(a, 0, 1, C::DefaultFlag | C::CacheFlag)
- << Range(a, 0, 1, C::CacheFlag)
- << Range(a, 1, 5, C::DefaultFlag | C::CacheFlag)
- << Range(a, 0, 1, C::CacheFlag)
- << Range(a, 6, 2, C::DefaultFlag | C::CacheFlag)
- << Range(a, 0, 1, C::CacheFlag)
- << Range(a, 8, 3, C::DefaultFlag | C::CacheFlag)
- << Range(a, 0, 1, C::CacheFlag)
- << Range(a, 11, 1, C::DefaultFlag | C::CacheFlag)
- << Range(a, 12, 5, C::DefaultFlag))
- << a << 1 << 10
- << (RemoveList()
- << Remove(0, 0, 1, 4, 5, C::DefaultFlag | C::CacheFlag)
- << Remove(0, 0, 1,10, 2, C::DefaultFlag | C::CacheFlag)
- << Remove(0, 0, 1,13, 3, C::DefaultFlag | C::CacheFlag))
- << IndexArray(cacheIndexes)
- << IndexArray(defaultIndexes)
- << IndexArray()
- << IndexArray();
- }
-}
-
-void tst_qdeclarativelistcompositor::listItemsRemoved()
-{
- QFETCH(RangeList, ranges);
- QFETCH(void *, list);
- QFETCH(int, index);
- QFETCH(int, count);
- QFETCH(RemoveList, expectedRemoves);
- QFETCH(IndexArray, cacheIndexes);
- QFETCH(IndexArray, defaultIndexes);
- QFETCH(IndexArray, visibleIndexes);
- QFETCH(IndexArray, selectionIndexes);
-
- QDeclarativeListCompositor compositor;
- compositor.setGroupCount(4);
- compositor.setDefaultGroups(VisibleFlag | C::DefaultFlag);
-
- foreach (const Range &range, ranges)
- compositor.append(range.list, range.index, range.count, range.flags);
-
- QVector<C::Remove> removes;
- compositor.listItemsRemoved(list, index, count, &removes);
-
- QCOMPARE(removes, expectedRemoves);
-
- QCOMPARE(compositor.count(C::Cache), cacheIndexes.count);
- for (int i = 0; i < cacheIndexes.count; ++i) {
- if (cacheIndexes[i] != -1) {
- QCOMPARE(compositor.find(C::Cache, i).modelIndex(), cacheIndexes[i]);
- }
- }
- QCOMPARE(compositor.count(C::Default), defaultIndexes.count);
- for (int i = 0; i < defaultIndexes.count; ++i) {
- if (defaultIndexes[i] != -1) {
- QCOMPARE(compositor.find(C::Default, i).modelIndex(), defaultIndexes[i]);
- }
- }
- QCOMPARE(compositor.count(Visible), visibleIndexes.count);
- for (int i = 0; i < visibleIndexes.count; ++i) {
- if (visibleIndexes[i] != -1) {
- QCOMPARE(compositor.find(Visible, i).modelIndex(), visibleIndexes[i]);
- }
- }
- QCOMPARE(compositor.count(Selection), selectionIndexes.count);
- for (int i = 0; i < selectionIndexes.count; ++i) {
- if (selectionIndexes[i] != -1) {
- QCOMPARE(compositor.find(Selection, i).modelIndex(), selectionIndexes[i]);
- }
- }
-}
-
-void tst_qdeclarativelistcompositor::listItemsMoved_data()
-{
- QTest::addColumn<RangeList>("ranges");
- QTest::addColumn<void *>("list");
- QTest::addColumn<int>("from");
- QTest::addColumn<int>("to");
- QTest::addColumn<int>("count");
- QTest::addColumn<RemoveList>("expectedRemoves");
- QTest::addColumn<InsertList>("expectedInserts");
- QTest::addColumn<IndexArray>("cacheIndexes");
- QTest::addColumn<IndexArray>("defaultIndexes");
- QTest::addColumn<IndexArray>("visibleIndexes");
- QTest::addColumn<IndexArray>("selectionIndexes");
-
- int listA; void *a = &listA;
- int listB; void *b = &listB;
-
- { static const int defaultIndexes[] = {/*A*/0,2,3,4,/*B*/0,1,2,3,/*A*/5,6,1};
- QTest::newRow("4, 1, 3")
- << (RangeList()
- << Range(a, 0, 2, C::PrependFlag | C::DefaultFlag)
- << Range(a, 2, 3, C::PrependFlag)
- << Range(a, 5, 2, C::AppendFlag | C::PrependFlag | C::DefaultFlag)
- << Range(b, 0, 4, C::DefaultFlag)
- << Range(a, 2, 3, C::DefaultFlag))
- << a << 4 << 1 << 3
- << (RemoveList()
- << Remove(0, 0, 2, 0, 2, C::DefaultFlag, 0))
- << (InsertList()
- << Insert(0, 0, 1, 0, 2, C::DefaultFlag, 0))
- << IndexArray()
- << IndexArray(defaultIndexes)
- << IndexArray()
- << IndexArray();
- } { static const int defaultIndexes[] = {/*A*/1,2,3,6,/*B*/0,1,2,3,/*A*/4,5,0};
- QTest::newRow("0, 6, 1")
- << (RangeList()
- << Range(a, 0, 1, C::PrependFlag | C::DefaultFlag)
- << Range(a, 1, 1, C::PrependFlag)
- << Range(a, 2, 3, C::PrependFlag | C::DefaultFlag)
- << Range(a, 5, 2, C::PrependFlag)
- << Range(a, 7, 0, C::AppendFlag | C::PrependFlag | C::DefaultFlag)
- << Range(b, 0, 4, C::DefaultFlag)
- << Range(a, 5, 2, C::DefaultFlag)
- << Range(a, 1, 1, C::DefaultFlag))
- << a << 0 << 6 << 1
- << (RemoveList()
- << Remove(0, 0, 0, 0, 1, C::DefaultFlag, 0))
- << (InsertList()
- << Insert(0, 0, 3, 0, 1, C::DefaultFlag, 0))
- << IndexArray()
- << IndexArray(defaultIndexes)
- << IndexArray()
- << IndexArray();
- } { static const int cacheIndexes[] = {/*A*/0,1,3,4};
- static const int defaultIndexes[] = {/*A*/0,1,2,3,4,5,6,7};
- QTest::newRow("6, 2, 1")
- << (RangeList()
- << Range(a, 0, 4, C::PrependFlag | C::DefaultFlag | C::CacheFlag)
- << Range(a, 4, 4, C::AppendFlag | C::PrependFlag | C::DefaultFlag))
- << a << 6 << 2 << 1
- << (RemoveList()
- << Remove(0, 0, 6, 4, 1, C::DefaultFlag, 0))
- << (InsertList()
- << Insert(0, 0, 2, 2, 1, C::DefaultFlag, 0))
- << IndexArray(cacheIndexes)
- << IndexArray(defaultIndexes)
- << IndexArray()
- << IndexArray();
- } { static const int cacheIndexes[] = {/*A*/0,1,-1,-1,-1,2,3,4,5,6,7};
- static const int defaultIndexes[] = {/*A*/0,1,2,3,4,5,6,7};
- QTest::newRow("Move after remove")
- << (RangeList()
- << Range(a, 0, 2, C::PrependFlag | C::DefaultFlag | C::CacheFlag)
- << Range(a, 2, 3, C::CacheFlag)
- << Range(a, 2, 6, C::AppendFlag | C::PrependFlag | C::DefaultFlag | C::CacheFlag))
- << a << 4 << 2 << 2
- << (RemoveList()
- << Remove(0, 0, 4, 7, 2, C::DefaultFlag | C::CacheFlag, 0))
- << (InsertList()
- << Insert(0, 0, 2, 5, 2, C::DefaultFlag | C::CacheFlag, 0))
- << IndexArray(cacheIndexes)
- << IndexArray(defaultIndexes)
- << IndexArray()
- << IndexArray();
- } { static const int cacheIndexes[] = {/*A*/0,1,5,6,7,8,9,10,11,12};
- static const int defaultIndexes[] = {/*A*/0,1,2,3,4,5,6,7,8,9,10,11,12};
- QTest::newRow("Move merge tail")
- << (RangeList()
- << Range(a, 0, 10, C::PrependFlag | C::DefaultFlag | C::CacheFlag)
- << Range(a, 10, 3, C::PrependFlag | C::DefaultFlag)
- << Range(a, 13, 0, C::AppendFlag | C::PrependFlag | C::DefaultFlag | C::CacheFlag))
- << a << 8 << 0 << 5
- << (RemoveList()
- << Remove(0, 0, 8, 8, 2, C::DefaultFlag | C::CacheFlag, 0)
- << Remove(0, 0, 8, 8, 3, C::DefaultFlag, 1))
- << (InsertList()
- << Insert(0, 0, 0, 0, 2, C::DefaultFlag | C::CacheFlag, 0)
- << Insert(0, 0, 2, 2, 3, C::DefaultFlag, 1))
- << IndexArray(cacheIndexes)
- << IndexArray(defaultIndexes)
- << IndexArray()
- << IndexArray();
- } { static const int cacheIndexes[] = {/*A*/0,1,2,3};
- static const int defaultIndexes[] = {/*A*/0,1,2,3};
- static const int selectionIndexes[] = {/*A*/3};
- QTest::newRow("Move selection")
- << (RangeList()
- << Range(a, 0, 2, C::PrependFlag | C::DefaultFlag | C::CacheFlag)
- << Range(a, 2, 1, C::PrependFlag | SelectionFlag | C::DefaultFlag | C::CacheFlag)
- << Range(a, 3, 1, C::AppendFlag | C::PrependFlag | C::DefaultFlag | C::CacheFlag))
- << a << 2 << 3 << 1
- << (RemoveList()
- << Remove(0, 0, 2, 2, 1, C::PrependFlag | SelectionFlag | C::DefaultFlag | C::CacheFlag, 0))
- << (InsertList()
- << Insert(0, 0, 3, 3, 1, C::PrependFlag | SelectionFlag | C::DefaultFlag | C::CacheFlag, 0))
- << IndexArray(cacheIndexes)
- << IndexArray(defaultIndexes)
- << IndexArray()
- << IndexArray(selectionIndexes);
- } { static const int cacheIndexes[] = {/*A*/0,1,2,3,4,5,8,9};
- static const int defaultIndexes[] = {/*A*/0,1,2,3,4,5,6,7,8,9,10,11};
- QTest::newRow("move mixed cached items")
- << (RangeList()
- << Range(a, 0, 1, C::PrependFlag | C::DefaultFlag | C::CacheFlag)
- << Range(a, 1, 2, C::PrependFlag | C::DefaultFlag)
- << Range(a, 3, 7, C::PrependFlag | C::DefaultFlag | C::CacheFlag)
- << Range(a, 10, 2, C::PrependFlag | C::DefaultFlag))
- << a << 1 << 6 << 3
- << (RemoveList()
- << Remove(0, 0, 1, 1, 2, C::PrependFlag | C::DefaultFlag, 0)
- << Remove(0, 0, 1, 1, 1, C::PrependFlag | C::DefaultFlag | C::CacheFlag, 1))
- << (InsertList()
- << Insert(0, 0, 6, 6, 2, C::PrependFlag | C::DefaultFlag, 0)
- << Insert(0, 0, 8, 6, 1, C::PrependFlag | C::DefaultFlag | C::CacheFlag, 1))
- << IndexArray(cacheIndexes)
- << IndexArray(defaultIndexes)
- << IndexArray()
- << IndexArray();
- }
-}
-
-void tst_qdeclarativelistcompositor::listItemsMoved()
-{
- QFETCH(RangeList, ranges);
- QFETCH(void *, list);
- QFETCH(int, from);
- QFETCH(int, to);
- QFETCH(int, count);
- QFETCH(RemoveList, expectedRemoves);
- QFETCH(InsertList, expectedInserts);
- QFETCH(IndexArray, cacheIndexes);
- QFETCH(IndexArray, defaultIndexes);
- QFETCH(IndexArray, visibleIndexes);
- QFETCH(IndexArray, selectionIndexes);
-
- QDeclarativeListCompositor compositor;
- compositor.setGroupCount(4);
- compositor.setDefaultGroups(VisibleFlag | C::DefaultFlag);
-
- foreach (const Range &range, ranges)
- compositor.append(range.list, range.index, range.count, range.flags);
-
- QVector<C::Remove> removes;
- QVector<C::Insert> inserts;
- compositor.listItemsMoved(list, from, to, count, &removes, &inserts);
-
- QCOMPARE(removes, expectedRemoves);
- QCOMPARE(inserts, expectedInserts);
-
- QCOMPARE(compositor.count(C::Cache), cacheIndexes.count);
- for (int i = 0; i < cacheIndexes.count; ++i) {
- if (cacheIndexes[i] != -1) {
- QCOMPARE(compositor.find(C::Cache, i).modelIndex(), cacheIndexes[i]);
- }
- }
- QCOMPARE(compositor.count(C::Default), defaultIndexes.count);
- for (int i = 0; i < defaultIndexes.count; ++i) {
- if (defaultIndexes[i] != -1) {
- QCOMPARE(compositor.find(C::Default, i).modelIndex(), defaultIndexes[i]);
- }
- }
- QCOMPARE(compositor.count(Visible), visibleIndexes.count);
- for (int i = 0; i < visibleIndexes.count; ++i) {
- if (visibleIndexes[i] != -1) {
- QCOMPARE(compositor.find(Visible, i).modelIndex(), visibleIndexes[i]);
- }
- }
- QCOMPARE(compositor.count(Selection), selectionIndexes.count);
- for (int i = 0; i < selectionIndexes.count; ++i) {
- if (selectionIndexes[i] != -1) {
- QCOMPARE(compositor.find(Selection, i).modelIndex(), selectionIndexes[i]);
- }
- }
-}
-
-void tst_qdeclarativelistcompositor::listItemsChanged_data()
-{
- QTest::addColumn<RangeList>("ranges");
- QTest::addColumn<void *>("list");
- QTest::addColumn<int>("index");
- QTest::addColumn<int>("count");
- QTest::addColumn<ChangeList>("expectedChanges");
-
- int listA; void *a = &listA;
- int listB; void *b = &listB;
-
- QTest::newRow("overlapping")
- << (RangeList()
- << Range(a, 0, 2, C::PrependFlag | C::DefaultFlag)
- << Range(a, 2, 3, C::PrependFlag)
- << Range(a, 5, 2, C::AppendFlag | C::PrependFlag | C::DefaultFlag)
- << Range(b, 0, 4, C::DefaultFlag)
- << Range(a, 2, 3, C::DefaultFlag))
- << a << 3 << 4
- << (ChangeList()
- << Change(0, 0, 2, 0, 2, C::DefaultFlag)
- << Change(0, 0, 9, 0, 2, C::DefaultFlag));
- QTest::newRow("Change after remove")
- << (RangeList()
- << Range(a, 0, 2, C::PrependFlag | C::DefaultFlag | C::CacheFlag)
- << Range(a, 2, 3, C::CacheFlag)
- << Range(a, 2, 6, C::AppendFlag | C::PrependFlag | C::DefaultFlag | C::CacheFlag))
- << a << 3 << 2
- << (ChangeList()
- << Change(0, 0, 3, 6, 2, C::DefaultFlag | C::CacheFlag));
-}
-
-void tst_qdeclarativelistcompositor::listItemsChanged()
-{
- QFETCH(RangeList, ranges);
- QFETCH(void *, list);
- QFETCH(int, index);
- QFETCH(int, count);
- QFETCH(ChangeList, expectedChanges);
-
- QDeclarativeListCompositor compositor;
- compositor.setGroupCount(4);
- compositor.setDefaultGroups(VisibleFlag | C::DefaultFlag);
-
- foreach (const Range &range, ranges)
- compositor.append(range.list, range.index, range.count, range.flags);
-
- QVector<C::Change> changes;
- compositor.listItemsChanged(list, index, count, &changes);
-
- QCOMPARE(changes, expectedChanges);
-}
-
-QTEST_MAIN(tst_qdeclarativelistcompositor)
-
-#include "tst_qdeclarativelistcompositor.moc"
-
-