diff options
author | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2013-02-25 11:58:49 +0100 |
---|---|---|
committer | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2013-02-25 11:58:49 +0100 |
commit | b44c6dfb1dc3ef3bc5c6ba8590f6329b50593c17 (patch) | |
tree | 07216922d8ad6a262c2ee4d35611a34adf5caf83 /tests/auto | |
parent | eb338eabd276487f7779d7b682e7369f3903313e (diff) | |
parent | e8ca72d484c0e56f030e4742bb5f92b6f0555146 (diff) |
Merge remote-tracking branch 'origin/stable' into dev
Change-Id: I71384165752875c073dfbcbd279cfdc82eeea4dc
Diffstat (limited to 'tests/auto')
4 files changed, 236 insertions, 2 deletions
diff --git a/tests/auto/declarative/qdeclarativeflickable/data/nestedStopAtBounds.qml b/tests/auto/declarative/qdeclarativeflickable/data/nestedStopAtBounds.qml new file mode 100644 index 00000000..6b28edf5 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeflickable/data/nestedStopAtBounds.qml @@ -0,0 +1,38 @@ +import QtQuick 1.1 + +Flickable { + id: outer + objectName: "outerFlickable" + width: 400 + height: 400 + contentX: 50 + contentY: 50 + contentWidth: 500 + contentHeight: 500 + flickableDirection: inner.flickableDirection + + Rectangle { + x: 100 + y: 100 + width: 300 + height: 300 + + color: "yellow" + Flickable { + id: inner + objectName: "innerFlickable" + anchors.fill: parent + contentX: 100 + contentY: 100 + contentWidth: 400 + contentHeight: 400 + boundsBehavior: Flickable.StopAtBounds + + Rectangle { + anchors.fill: parent + anchors.margins: 100 + color: "blue" + } + } + } +} diff --git a/tests/auto/declarative/qdeclarativeflickable/tst_qdeclarativeflickable.cpp b/tests/auto/declarative/qdeclarativeflickable/tst_qdeclarativeflickable.cpp index d36e96f9..b0fa7bd6 100644 --- a/tests/auto/declarative/qdeclarativeflickable/tst_qdeclarativeflickable.cpp +++ b/tests/auto/declarative/qdeclarativeflickable/tst_qdeclarativeflickable.cpp @@ -75,6 +75,8 @@ private slots: void testQtQuick11Attributes_data(); void wheel(); void flickVelocity(); + void nestedStopAtBounds(); + void nestedStopAtBounds_data(); private: QDeclarativeEngine engine; @@ -524,6 +526,80 @@ void tst_qdeclarativeflickable::flick(QGraphicsView *canvas, const QPoint &from, QTest::mouseRelease(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(to)); } +void tst_qdeclarativeflickable::nestedStopAtBounds_data() +{ + QTest::addColumn<bool>("transpose"); + QTest::addColumn<bool>("invert"); + + QTest::newRow("left") << false << false; + QTest::newRow("right") << false << true; + QTest::newRow("top") << true << false; + QTest::newRow("bottom") << true << true; +} + +void tst_qdeclarativeflickable::nestedStopAtBounds() +{ + QFETCH(bool, transpose); + QFETCH(bool, invert); + + QDeclarativeView view; + view.setSource(QUrl::fromLocalFile(SRCDIR "/data/nestedStopAtBounds.qml")); + view.show(); + view.activateWindow(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); + QVERIFY(view.rootObject()); + + QDeclarativeFlickable *outer = qobject_cast<QDeclarativeFlickable*>(view.rootObject()); + QVERIFY(outer); + + QDeclarativeFlickable *inner = outer->findChild<QDeclarativeFlickable*>("innerFlickable"); + QVERIFY(inner); + inner->setFlickableDirection(transpose ? QDeclarativeFlickable::VerticalFlick : QDeclarativeFlickable::HorizontalFlick); + inner->setContentX(invert ? 0 : 100); + inner->setContentY(invert ? 0 : 100); + + const int threshold = QApplication::startDragDistance(); + + QPoint position(200, 200); + int &axis = transpose ? position.ry() : position.rx(); + + QGraphicsSceneMouseEvent moveEvent(QEvent::GraphicsSceneMouseMove); + moveEvent.setButton(Qt::LeftButton); + moveEvent.setButtons(Qt::LeftButton); + + // drag toward the aligned boundary. Outer mouse area dragged. + QTest::mousePress(view.viewport(), Qt::LeftButton, 0, position); + QTest::qWait(10); + axis += invert ? threshold * 2 : -threshold * 2; + moveEvent.setScenePos(position); + QApplication::sendEvent(view.scene(), &moveEvent); + axis += invert ? threshold : -threshold; + moveEvent.setScenePos(position); + QApplication::sendEvent(view.scene(), &moveEvent); + QVERIFY(outer->contentX() != 50 || outer->contentY() != 50); + QVERIFY((inner->contentX() == 0 || inner->contentX() == 100) + && (inner->contentY() == 0 || inner->contentY() == 100)); + QTest::mouseRelease(view.viewport(), Qt::LeftButton, 0, position); + + axis = 200; + outer->setContentX(50); + outer->setContentY(50); + + // drag away from the aligned boundary. Inner mouse area dragged. + QTest::mousePress(view.viewport(), Qt::LeftButton, 0, position); + QTest::qWait(10); + axis += invert ? -threshold * 2 : threshold * 2; + moveEvent.setScenePos(position); + QApplication::sendEvent(view.scene(), &moveEvent); + axis += invert ? -threshold : threshold; + moveEvent.setScenePos(position); + QApplication::sendEvent(view.scene(), &moveEvent); + QVERIFY(outer->contentX() == 50 && outer->contentY() == 50); + QVERIFY((inner->contentX() != 0 && inner->contentX() != 100) + || (inner->contentY() != 0 && inner->contentY() != 100)); + QTest::mouseRelease(view.viewport(), Qt::LeftButton, 0, position); +} + template<typename T> T *tst_qdeclarativeflickable::findItem(QGraphicsObject *parent, const QString &objectName) { diff --git a/tests/auto/declarative/qdeclarativemousearea/data/nestedStopAtBounds.qml b/tests/auto/declarative/qdeclarativemousearea/data/nestedStopAtBounds.qml new file mode 100644 index 00000000..0379964d --- /dev/null +++ b/tests/auto/declarative/qdeclarativemousearea/data/nestedStopAtBounds.qml @@ -0,0 +1,44 @@ +import QtQuick 1.1 + +Rectangle { + width: 400 + height: 400 + + MouseArea { + id: outer + objectName: "outer" + x: 50 + y: 50 + width: 300 + height: 300 + + drag.target: outer + drag.filterChildren: true + + Rectangle { + anchors.fill: parent + color: "yellow" + } + + MouseArea { + id: inner + objectName: "inner" + + x: 0 + y: 0 + width: 200 + height: 200 + + drag.target: inner + drag.minimumX: 0 + drag.maximumX: 100 + drag.minimumY: 0 + drag.maximumY: 100 + + Rectangle { + anchors.fill: parent + color: "blue" + } + } + } +} diff --git a/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp b/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp index b28381ef..37e64d4d 100644 --- a/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp +++ b/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp @@ -71,6 +71,8 @@ private slots: void preventContextMenu(); #endif // QT_NO_CONTEXTMENU void changeAxis(); + void nestedStopAtBounds(); + void nestedStopAtBounds_data(); private: QDeclarativeView *createView(); @@ -595,8 +597,8 @@ void tst_QDeclarativeMouseArea::preventStealing() QVERIFY(!mouseArea->pressed()); // Flickable content should have moved. - QCOMPARE(flickable->contentX(), 15.); - QCOMPARE(flickable->contentY(), 15.); + QCOMPARE(flickable->contentX(), 30.); + QCOMPARE(flickable->contentY(), 30.); QTest::mouseRelease(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(50, 50))); @@ -776,6 +778,80 @@ void tst_QDeclarativeMouseArea::changeAxis() delete canvas; } +void tst_QDeclarativeMouseArea::nestedStopAtBounds_data() +{ + QTest::addColumn<bool>("transpose"); + QTest::addColumn<bool>("invert"); + + QTest::newRow("left") << false << false; + QTest::newRow("right") << false << true; + QTest::newRow("top") << true << false; + QTest::newRow("bottom") << true << true; +} + +void tst_QDeclarativeMouseArea::nestedStopAtBounds() +{ + QFETCH(bool, transpose); + QFETCH(bool, invert); + + QDeclarativeView view; + view.setSource(QUrl::fromLocalFile(SRCDIR "/data/nestedStopAtBounds.qml")); + view.show(); + view.activateWindow(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); + QVERIFY(view.rootObject()); + + QDeclarativeMouseArea *outer = view.rootObject()->findChild<QDeclarativeMouseArea*>("outer"); + QVERIFY(outer); + + QDeclarativeMouseArea *inner = outer->findChild<QDeclarativeMouseArea*>("inner"); + QVERIFY(inner); + inner->drag()->setAxis(transpose ? QDeclarativeDrag::YAxis : QDeclarativeDrag::XAxis); + inner->setX(invert ? 100 : 0); + inner->setY(invert ? 100 : 0); + + const int threshold = QApplication::startDragDistance(); + + QPoint position(200, 200); + int &axis = transpose ? position.ry() : position.rx(); + + QGraphicsSceneMouseEvent moveEvent(QEvent::GraphicsSceneMouseMove); + moveEvent.setButton(Qt::LeftButton); + moveEvent.setButtons(Qt::LeftButton); + + // drag toward the aligned boundary. Outer mouse area dragged. + QTest::mousePress(view.viewport(), Qt::LeftButton, 0, position); + QTest::qWait(10); + axis += invert ? threshold * 2 : -threshold * 2; + moveEvent.setScenePos(position); + QApplication::sendEvent(view.scene(), &moveEvent); + axis += invert ? threshold : -threshold; + moveEvent.setScenePos(position); + QApplication::sendEvent(view.scene(), &moveEvent); + QCOMPARE(outer->drag()->active(), true); + QCOMPARE(inner->drag()->active(), false); + QTest::mouseRelease(view.viewport(), Qt::LeftButton, 0, position); + + QVERIFY(!outer->drag()->active()); + + axis = 200; + outer->setX(50); + outer->setY(50); + + // drag away from the aligned boundary. Inner mouse area dragged. + QTest::mousePress(view.viewport(), Qt::LeftButton, 0, position); + QTest::qWait(10); + axis += invert ? -threshold * 2 : threshold * 2; + moveEvent.setScenePos(position); + QApplication::sendEvent(view.scene(), &moveEvent); + axis += invert ? -threshold : threshold; + moveEvent.setScenePos(position); + QApplication::sendEvent(view.scene(), &moveEvent); + QCOMPARE(outer->drag()->active(), false); + QCOMPARE(inner->drag()->active(), true); + QTest::mouseRelease(view.viewport(), Qt::LeftButton, 0, position); +} + QTEST_MAIN(tst_QDeclarativeMouseArea) #include "tst_qdeclarativemousearea.moc" |