diff options
-rw-r--r-- | src/declarative/util/qdeclarativechangeset.cpp | 8 | ||||
-rw-r--r-- | tests/auto/declarative/declarative.pro | 1 | ||||
-rw-r--r-- | tests/auto/declarative/qdeclarativechangeset/tst_qdeclarativechangeset.cpp | 22 |
3 files changed, 26 insertions, 5 deletions
diff --git a/src/declarative/util/qdeclarativechangeset.cpp b/src/declarative/util/qdeclarativechangeset.cpp index c264ca011e..33757062a1 100644 --- a/src/declarative/util/qdeclarativechangeset.cpp +++ b/src/declarative/util/qdeclarativechangeset.cpp @@ -276,7 +276,7 @@ void QDeclarativeChangeSet::applyRemovals(QVector<Remove> &removals, QVector<Ins for (; rend != m_removes.end() && rit->moveId == -1 && rend->moveId == -1 - && rit->index + rit->count > rend->index; ++rend) { + && rit->index + rit->count >= rend->index; ++rend) { count += rend->count; } if (remove != rend) { @@ -288,7 +288,6 @@ void QDeclarativeChangeSet::applyRemovals(QVector<Remove> &removals, QVector<Ins index += difference; rit->count -= difference; removeCount += difference; - remove->index = rit->index; remove->count = count; remove = m_removes.erase(++remove, rend); @@ -302,10 +301,10 @@ void QDeclarativeChangeSet::applyRemovals(QVector<Remove> &removals, QVector<Ins remove = m_removes.insert(remove, Remove(rit->index, offset, moveId)); ++remove; rit->count -= offset; + removeCount += offset; } remove->index = rit->index; index += offset; - removeCount += offset; ++remove; } else { @@ -313,15 +312,14 @@ void QDeclarativeChangeSet::applyRemovals(QVector<Remove> &removals, QVector<Ins remove = m_removes.insert(remove, Remove(rit->index, offset)); ++remove; rit->count -= offset; + removeCount += offset; } remove->index = rit->index; index += offset; - removeCount += offset; ++remove; } index += count; - rit->count -= count; } if (rit->count > 0) { diff --git a/tests/auto/declarative/declarative.pro b/tests/auto/declarative/declarative.pro index d8567db8bb..60eb2a9fa0 100644 --- a/tests/auto/declarative/declarative.pro +++ b/tests/auto/declarative/declarative.pro @@ -31,6 +31,7 @@ PRIVATETESTS += \ qdeclarativeapplication \ qdeclarativebehaviors \ qdeclarativebinding \ + qdeclarativechangeset \ qdeclarativeconnection \ qdeclarativeenginedebug \ qdeclarativedebugclient \ diff --git a/tests/auto/declarative/qdeclarativechangeset/tst_qdeclarativechangeset.cpp b/tests/auto/declarative/qdeclarativechangeset/tst_qdeclarativechangeset.cpp index 6b3fcf90bf..8da3d9b814 100644 --- a/tests/auto/declarative/qdeclarativechangeset/tst_qdeclarativechangeset.cpp +++ b/tests/auto/declarative/qdeclarativechangeset/tst_qdeclarativechangeset.cpp @@ -727,6 +727,28 @@ void tst_qdeclarativemodelchange::sequence_data() QTest::newRow("m(12-23,6),r(20,4)") << (SignalList() << Move(12,23,6) << Remove(20,4)) << (SignalList() << Remove(12,1) << Remove(12,5,0) << Remove(20,3) << Insert(20,5,0)); + + + // Complex + QTest::newRow("r(15,1),r(22,1)") + << (SignalList() << Remove(15,1) << Remove(22,1)) + << (SignalList() << Remove(15,1) << Remove(22,1)); + QTest::newRow("r(15,1),r(22,1),r(25,1)") + << (SignalList() << Remove(15,1) << Remove(22,1) << Remove(25,1)) + << (SignalList() << Remove(15,1) << Remove(22,1) << Remove(25,1)); + QTest::newRow("r(15,1),r(22,1),r(25,1),r(15,1)") + << (SignalList() << Remove(15,1) << Remove(22,1) << Remove(25,1) << Remove(15,1)) + << (SignalList() << Remove(15,2) << Remove(21,1) << Remove(24,1)); + QTest::newRow("r(15,1),r(22,1),r(25,1),r(15,1),r(13,1)") + << (SignalList() << Remove(15,1) << Remove(22,1) << Remove(25,1) << Remove(15,1) << Remove(13,1)) + << (SignalList() << Remove(13,1) << Remove(14,2) << Remove(20,1) << Remove(23,1)); + QTest::newRow("r(15,1),r(22,1),r(25,1),r(15,1),r(13,1),r(13,1)") + << (SignalList() << Remove(15,1) << Remove(22,1) << Remove(25,1) << Remove(15,1) << Remove(13,1) << Remove(13,1)) + << (SignalList() << Remove(13,4) << Remove(19,1) << Remove(22,1)); + QTest::newRow("r(15,1),r(22,1),r(25,1),r(15,1),r(13,1),r(13,1),m(12,13,1)") + << (SignalList() << Remove(15,1) << Remove(22,1) << Remove(25,1) << Remove(15,1) << Remove(13,1) << Remove(13,1) << Move(12,13,1)) + << (SignalList() << Remove(12,1,0) << Remove(12,4) << Remove(18,1) << Remove(21,1) << Insert(13,1,0)); + } void tst_qdeclarativemodelchange::sequence() |