aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/quick/qquickpositioners
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/quick/qquickpositioners')
-rw-r--r--tests/auto/quick/qquickpositioners/data/grid-animated.qml5
-rw-r--r--tests/auto/quick/qquickpositioners/data/horizontal-animated.qml6
-rw-r--r--tests/auto/quick/qquickpositioners/data/transitions.qml57
-rw-r--r--tests/auto/quick/qquickpositioners/data/vertical-animated.qml5
-rw-r--r--tests/auto/quick/qquickpositioners/tst_qquickpositioners.cpp158
5 files changed, 211 insertions, 20 deletions
diff --git a/tests/auto/quick/qquickpositioners/data/grid-animated.qml b/tests/auto/quick/qquickpositioners/data/grid-animated.qml
index b8ee8f9a52..8a5e43834e 100644
--- a/tests/auto/quick/qquickpositioners/data/grid-animated.qml
+++ b/tests/auto/quick/qquickpositioners/data/grid-animated.qml
@@ -9,6 +9,11 @@ Item {
objectName: "grid"
columns: 3
layoutDirection: testRightToLeft ? Qt.RightToLeft : Qt.LeftToRight
+ populate: Transition {
+ NumberAnimation {
+ properties: "x,y";
+ }
+ }
add: Transition {
NumberAnimation {
properties: "x,y";
diff --git a/tests/auto/quick/qquickpositioners/data/horizontal-animated.qml b/tests/auto/quick/qquickpositioners/data/horizontal-animated.qml
index a88c26b66c..b68367022c 100644
--- a/tests/auto/quick/qquickpositioners/data/horizontal-animated.qml
+++ b/tests/auto/quick/qquickpositioners/data/horizontal-animated.qml
@@ -9,6 +9,12 @@ Item {
Row {
objectName: "row"
layoutDirection: testRightToLeft ? Qt.RightToLeft : Qt.LeftToRight
+ populate: Transition {
+ enabled: testEnabled ? false : true
+ NumberAnimation {
+ properties: "x";
+ }
+ }
add: Transition {
enabled: testEnabled ? false : true
NumberAnimation {
diff --git a/tests/auto/quick/qquickpositioners/data/transitions.qml b/tests/auto/quick/qquickpositioners/data/transitions.qml
index e7570de70c..a1f27bb06e 100644
--- a/tests/auto/quick/qquickpositioners/data/transitions.qml
+++ b/tests/auto/quick/qquickpositioners/data/transitions.qml
@@ -9,7 +9,8 @@ Rectangle {
property real incrementalSize: 5
- property int targetTransitionsDone
+ property int populateTransitionsDone
+ property int addTransitionsDone
property int displaceTransitionsDone
property var targetTrans_items: new Object()
@@ -35,16 +36,44 @@ Rectangle {
model_displacedItems_transitionVia.addItem(name, "")
}
+ Component.onCompleted: {
+ if (dynamicallyPopulate) {
+ for (var i=0; i<30; i++)
+ testModel.addItem("item " + i, "")
+ }
+ }
+
+ Transition {
+ id: populateTransition
+ enabled: usePopulateTransition
+
+ SequentialAnimation {
+ ScriptAction {
+ script: {
+ root.targetTrans_items[populateTransition.ViewTransition.item.nameData] = populateTransition.ViewTransition.index
+ root.targetTrans_targetIndexes.push(populateTransition.ViewTransition.targetIndexes)
+ root.targetTrans_targetItems.push(root.copyList(populateTransition.ViewTransition.targetItems))
+ }
+ }
+ ParallelAnimation {
+ NumberAnimation { properties: "x"; from: targetItems_transitionFrom.x; duration: root.duration }
+ NumberAnimation { properties: "y"; from: targetItems_transitionFrom.y; duration: root.duration }
+ }
+
+ ScriptAction { script: root.populateTransitionsDone += 1 }
+ }
+ }
+
Transition {
- id: targetTransition
+ id: addTransition
enabled: enableAddTransition
SequentialAnimation {
ScriptAction {
script: {
- root.targetTrans_items[targetTransition.ViewTransition.item.nameData] = targetTransition.ViewTransition.index
- root.targetTrans_targetIndexes.push(targetTransition.ViewTransition.targetIndexes)
- root.targetTrans_targetItems.push(root.copyList(targetTransition.ViewTransition.targetItems))
+ root.targetTrans_items[addTransition.ViewTransition.item.nameData] = addTransition.ViewTransition.index
+ root.targetTrans_targetIndexes.push(addTransition.ViewTransition.targetIndexes)
+ root.targetTrans_targetItems.push(root.copyList(addTransition.ViewTransition.targetItems))
}
}
ParallelAnimation {
@@ -52,7 +81,7 @@ Rectangle {
NumberAnimation { properties: "y"; from: targetItems_transitionFrom.y; duration: root.duration }
}
- ScriptAction { script: root.targetTransitionsDone += 1 }
+ ScriptAction { script: root.addTransitionsDone += 1 }
}
}
@@ -87,6 +116,7 @@ Rectangle {
width: 400; height: 400
Repeater {
objectName: "repeater"
+ model: testedPositioner == "row" ? testModel : undefined
Rectangle {
property string nameData: name
objectName: "wrapper"
@@ -103,7 +133,8 @@ Rectangle {
}
}
- add: targetTransition
+ populate: populateTransition
+ add: addTransition
move: displaced
}
@@ -116,6 +147,7 @@ Rectangle {
width: 400; height: 400
Repeater {
objectName: "repeater"
+ model: testedPositioner == "column" ? testModel : undefined
Rectangle {
property string nameData: name
objectName: "wrapper"
@@ -132,7 +164,8 @@ Rectangle {
}
}
- add: targetTransition
+ populate: populateTransition
+ add: addTransition
move: displaced
}
@@ -145,6 +178,7 @@ Rectangle {
width: 400; height: 400
Repeater {
objectName: "repeater"
+ model: testedPositioner == "grid" ? testModel : undefined
Rectangle {
property string nameData: name
objectName: "wrapper"
@@ -162,7 +196,8 @@ Rectangle {
}
}
- add: targetTransition
+ populate: populateTransition
+ add: addTransition
move: displaced
}
@@ -175,6 +210,7 @@ Rectangle {
width: 400; height: 400
Repeater {
objectName: "repeater"
+ model: testedPositioner == "flow" ? testModel : undefined
Rectangle {
property string nameData: name
objectName: "wrapper"
@@ -191,7 +227,8 @@ Rectangle {
}
}
- add: targetTransition
+ populate: populateTransition
+ add: addTransition
move: displaced
}
}
diff --git a/tests/auto/quick/qquickpositioners/data/vertical-animated.qml b/tests/auto/quick/qquickpositioners/data/vertical-animated.qml
index ecf593cd70..1ea359e26c 100644
--- a/tests/auto/quick/qquickpositioners/data/vertical-animated.qml
+++ b/tests/auto/quick/qquickpositioners/data/vertical-animated.qml
@@ -5,6 +5,11 @@ Item {
height: 480
Column {
objectName: "column"
+ populate: Transition {
+ NumberAnimation {
+ properties: "y";
+ }
+ }
add: Transition {
NumberAnimation {
properties: "y";
diff --git a/tests/auto/quick/qquickpositioners/tst_qquickpositioners.cpp b/tests/auto/quick/qquickpositioners/tst_qquickpositioners.cpp
index 12b9d661d4..ee0988f107 100644
--- a/tests/auto/quick/qquickpositioners/tst_qquickpositioners.cpp
+++ b/tests/auto/quick/qquickpositioners/tst_qquickpositioners.cpp
@@ -93,6 +93,15 @@ private slots:
void test_attachedproperties();
void test_attachedproperties_data();
void test_attachedproperties_dynamic();
+
+ void populateTransitions_row();
+ void populateTransitions_row_data();
+ void populateTransitions_column();
+ void populateTransitions_column_data();
+ void populateTransitions_grid();
+ void populateTransitions_grid_data();
+ void populateTransitions_flow();
+ void populateTransitions_flow_data();
void addTransitions_row();
void addTransitions_row_data();
void addTransitions_column();
@@ -113,6 +122,8 @@ private slots:
private:
QQuickView *createView(const QString &filename, bool wait=true);
+ void populateTransitions(const QString &positionerObjectName);
+ void populateTransitions_data();
void addTransitions(const QString &positionerObjectName);
void addTransitions_data();
void moveTransitions(const QString &positionerObjectName);
@@ -123,6 +134,46 @@ private:
void checkItemPositions(QQuickItem *positioner, QaimModel *model, qreal incrementalSize);
};
+void tst_qquickpositioners::populateTransitions_row()
+{
+ populateTransitions("row");
+}
+
+void tst_qquickpositioners::populateTransitions_row_data()
+{
+ populateTransitions_data();
+}
+
+void tst_qquickpositioners::populateTransitions_column()
+{
+ populateTransitions("column");
+}
+
+void tst_qquickpositioners::populateTransitions_column_data()
+{
+ populateTransitions_data();
+}
+
+void tst_qquickpositioners::populateTransitions_grid()
+{
+ populateTransitions("grid");
+}
+
+void tst_qquickpositioners::populateTransitions_grid_data()
+{
+ populateTransitions_data();
+}
+
+void tst_qquickpositioners::populateTransitions_flow()
+{
+ populateTransitions("flow");
+}
+
+void tst_qquickpositioners::populateTransitions_flow_data()
+{
+ populateTransitions_data();
+}
+
void tst_qquickpositioners::addTransitions_row()
{
addTransitions("row");
@@ -509,6 +560,90 @@ void tst_qquickpositioners::test_horizontal_animated_disabled()
delete canvas;
}
+void tst_qquickpositioners::populateTransitions(const QString &positionerObjectName)
+{
+ QFETCH(bool, dynamicallyPopulate);
+ QFETCH(bool, usePopulateTransition);
+
+ QPointF targetItems_transitionFrom(-50, -50);
+ QPointF displacedItems_transitionVia(100, 100);
+
+ QaimModel model;
+ if (!dynamicallyPopulate) {
+ for (int i = 0; i < 30; i++)
+ model.addItem("Original item" + QString::number(i), "");
+ }
+
+ QaimModel model_targetItems_transitionFrom;
+ QaimModel model_displacedItems_transitionVia;
+
+ QQuickView *canvas = QQuickViewTestUtil::createView();
+ QQmlContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("usePopulateTransition", usePopulateTransition);
+ ctxt->setContextProperty("enableAddTransition", true);
+ ctxt->setContextProperty("dynamicallyPopulate", dynamicallyPopulate);
+ ctxt->setContextProperty("testModel", &model);
+ ctxt->setContextProperty("model_targetItems_transitionFrom", &model_targetItems_transitionFrom);
+ ctxt->setContextProperty("model_displacedItems_transitionVia", &model_displacedItems_transitionVia);
+ ctxt->setContextProperty("targetItems_transitionFrom", targetItems_transitionFrom);
+ ctxt->setContextProperty("displacedItems_transitionVia", displacedItems_transitionVia);
+ ctxt->setContextProperty("testedPositioner", positionerObjectName);
+ canvas->setSource(testFileUrl("transitions.qml"));
+
+ QQuickItem *positioner = canvas->rootObject()->findChild<QQuickItem*>(positionerObjectName);
+ QVERIFY(positioner);
+ canvas->show();
+ qApp->processEvents();
+
+ if (!dynamicallyPopulate && usePopulateTransition) {
+ QTRY_COMPARE(canvas->rootObject()->property("populateTransitionsDone").toInt(), model.count());
+ QTRY_COMPARE(canvas->rootObject()->property("addTransitionsDone").toInt(), 0);
+
+ QList<QPair<QString, QString> > targetData;
+ QList<int> targetIndexes;
+ for (int i=0; i<model.count(); i++) {
+ targetData << qMakePair(model.name(i), model.number(i));
+ targetIndexes << i;
+ }
+ QList<QQuickItem *> targetItems = findItems<QQuickItem>(positioner, "wrapper", targetIndexes);
+ model_targetItems_transitionFrom.matchAgainst(targetData, "wasn't animated from target 'from' pos", "shouldn't have been animated from target 'from' pos");
+ matchItemsAndIndexes(canvas->rootObject()->property("targetTrans_items").toMap(), model, targetIndexes);
+ matchIndexLists(canvas->rootObject()->property("targetTrans_targetIndexes").toList(), targetIndexes);
+ matchItemLists(canvas->rootObject()->property("targetTrans_targetItems").toList(), targetItems);
+
+ } else if (dynamicallyPopulate) {
+ QTRY_COMPARE(canvas->rootObject()->property("populateTransitionsDone").toInt(), 0);
+ QTRY_COMPARE(canvas->rootObject()->property("addTransitionsDone").toInt(), model.count());
+ } else {
+ QTRY_COMPARE(QQuickItemPrivate::get(positioner)->polishScheduled, false);
+ QTRY_COMPARE(canvas->rootObject()->property("populateTransitionsDone").toInt(), 0);
+ QTRY_COMPARE(canvas->rootObject()->property("addTransitionsDone").toInt(), 0);
+ }
+
+ checkItemPositions(positioner, &model, canvas->rootObject()->property("incrementalSize").toInt());
+
+ // add an item and check this is done with add transition, not populate
+ canvas->rootObject()->setProperty("populateTransitionsDone", 0);
+ canvas->rootObject()->setProperty("addTransitionsDone", 0);
+ model.insertItem(0, "new item", "");
+ QTRY_COMPARE(canvas->rootObject()->property("addTransitionsDone").toInt(), 1);
+ QTRY_COMPARE(canvas->rootObject()->property("populateTransitionsDone").toInt(), 0);
+
+ delete canvas;
+}
+
+void tst_qquickpositioners::populateTransitions_data()
+{
+ QTest::addColumn<bool>("dynamicallyPopulate");
+ QTest::addColumn<bool>("usePopulateTransition");
+
+ QTest::newRow("statically populate") << false << true;
+ QTest::newRow("statically populate, no populate transition") << false << false;
+
+ QTest::newRow("dynamically populate") << true << true;
+ QTest::newRow("dynamically populate, no populate transition") << true << false;
+}
+
void tst_qquickpositioners::addTransitions(const QString &positionerObjectName)
{
QFETCH(int, initialItemCount);
@@ -520,13 +655,12 @@ void tst_qquickpositioners::addTransitions(const QString &positionerObjectName)
QPointF displacedItems_transitionVia(100, 100);
QaimModel model;
- for (int i = 0; i < initialItemCount; i++)
- model.addItem("Original item" + QString::number(i), "");
QaimModel model_targetItems_transitionFrom;
QaimModel model_displacedItems_transitionVia;
QQuickView *canvas = QQuickViewTestUtil::createView();
QQmlContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("usePopulateTransition", false);
ctxt->setContextProperty("enableAddTransition", true);
ctxt->setContextProperty("model_targetItems_transitionFrom", &model_targetItems_transitionFrom);
ctxt->setContextProperty("model_displacedItems_transitionVia", &model_displacedItems_transitionVia);
@@ -536,12 +670,15 @@ void tst_qquickpositioners::addTransitions(const QString &positionerObjectName)
canvas->show();
qApp->processEvents();
- QList<QPair<QString,QString> > expectedDisplacedValues = expectedDisplacedIndexes.getModelDataValues(model);
-
QQuickItem *positioner = canvas->rootObject()->findChild<QQuickItem*>(positionerObjectName);
QVERIFY(positioner);
positioner->findChild<QQuickItem*>("repeater")->setProperty("model", QVariant::fromValue(&model));
+ QTRY_COMPARE(QQuickItemPrivate::get(positioner)->polishScheduled, false);
+ for (int i = 0; i < initialItemCount; i++)
+ model.addItem("Original item" + QString::number(i), "");
+
+ QList<QPair<QString,QString> > expectedDisplacedValues = expectedDisplacedIndexes.getModelDataValues(model);
QList<QPair<QString, QString> > targetData;
QList<int> targetIndexes;
for (int i=0; i<model.count(); i++) {
@@ -550,9 +687,9 @@ void tst_qquickpositioners::addTransitions(const QString &positionerObjectName)
}
QList<QQuickItem *> targetItems = findItems<QQuickItem>(positioner, "wrapper", targetIndexes);
- // check initial add transition
- // (positioners run the add transition on all items that are initially created for the view)
- QTRY_COMPARE(canvas->rootObject()->property("targetTransitionsDone").toInt(), initialItemCount);
+ // check add transition was run for first lot of added items
+ QTRY_COMPARE(canvas->rootObject()->property("populateTransitionsDone").toInt(), 0);
+ QTRY_COMPARE(canvas->rootObject()->property("addTransitionsDone").toInt(), initialItemCount);
QTRY_COMPARE(canvas->rootObject()->property("displaceTransitionsDone").toInt(), 0);
model_targetItems_transitionFrom.matchAgainst(targetData, "wasn't animated from target 'from' pos", "shouldn't have been animated from target 'from' pos");
matchItemsAndIndexes(canvas->rootObject()->property("targetTrans_items").toMap(), model, targetIndexes);
@@ -560,7 +697,7 @@ void tst_qquickpositioners::addTransitions(const QString &positionerObjectName)
matchItemLists(canvas->rootObject()->property("targetTrans_targetItems").toList(), targetItems);
model_targetItems_transitionFrom.clear();
- canvas->rootObject()->setProperty("targetTransitionsDone", 0);
+ canvas->rootObject()->setProperty("addTransitionsDone", 0);
canvas->rootObject()->setProperty("targetTrans_items", QVariantMap());
canvas->rootObject()->setProperty("targetTrans_targetIndexes", QVariantList());
canvas->rootObject()->setProperty("targetTrans_targetItems", QVariantList());
@@ -577,7 +714,7 @@ void tst_qquickpositioners::addTransitions(const QString &positionerObjectName)
targetItems = findItems<QQuickItem>(positioner, "wrapper", targetIndexes);
- QTRY_COMPARE(canvas->rootObject()->property("targetTransitionsDone").toInt(), targetData.count());
+ QTRY_COMPARE(canvas->rootObject()->property("addTransitionsDone").toInt(), targetData.count());
QTRY_COMPARE(canvas->rootObject()->property("displaceTransitionsDone").toInt(), expectedDisplacedIndexes.count());
// check the target and displaced items were animated
@@ -636,6 +773,7 @@ void tst_qquickpositioners::moveTransitions(const QString &positionerObjectName)
QQuickView *canvas = QQuickViewTestUtil::createView();
QQmlContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("usePopulateTransition", false);
ctxt->setContextProperty("enableAddTransition", QVariant(false));
ctxt->setContextProperty("model_targetItems_transitionFrom", &model_targetItems_transitionFrom);
ctxt->setContextProperty("model_displacedItems_transitionVia", &model_displacedItems_transitionVia);
@@ -669,7 +807,7 @@ void tst_qquickpositioners::moveTransitions(const QString &positionerObjectName)
}
QTRY_COMPARE(canvas->rootObject()->property("displaceTransitionsDone").toInt(), expectedDisplacedIndexes.count());
- QCOMPARE(canvas->rootObject()->property("targetTransitionsDone").toInt(), 0);
+ QCOMPARE(canvas->rootObject()->property("addTransitionsDone").toInt(), 0);
// check the target and displaced items were animated
QCOMPARE(model_targetItems_transitionFrom.count(), 0);