diff options
Diffstat (limited to 'tests/auto/quick/qquickitem2/tst_qquickitem.cpp')
-rw-r--r-- | tests/auto/quick/qquickitem2/tst_qquickitem.cpp | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/tests/auto/quick/qquickitem2/tst_qquickitem.cpp b/tests/auto/quick/qquickitem2/tst_qquickitem.cpp index bcfafac93b..e7f0adb24d 100644 --- a/tests/auto/quick/qquickitem2/tst_qquickitem.cpp +++ b/tests/auto/quick/qquickitem2/tst_qquickitem.cpp @@ -43,6 +43,7 @@ #include <QtQml/qqmlengine.h> #include <QtQml/qqmlcomponent.h> #include <QtQml/qqmlcontext.h> +#include <QtQuick/qquickitemgrabresult.h> #include <QtQuick/qquickview.h> #include <QtGui/private/qinputmethod_p.h> #include <QtQuick/private/qquickrectangle_p.h> @@ -91,6 +92,7 @@ private slots: void keyNavigation_RightToLeft(); void keyNavigation_skipNotVisible(); void keyNavigation_implicitSetting(); + void keyNavigation_focusReason(); void layoutMirroring(); void layoutMirroringIllegalParent(); void smooth(); @@ -120,6 +122,8 @@ private slots: void contains(); void childAt(); + void grab(); + private: QQmlEngine engine; bool qt_tab_all_widgets() { @@ -215,6 +219,21 @@ public: int mKey; }; +class FocusEventFilter : public QObject +{ +protected: + bool eventFilter(QObject *watched, QEvent *event) { + if ((event->type() == QEvent::FocusIn) || (event->type() == QEvent::FocusOut)) { + QFocusEvent *focusEvent = static_cast<QFocusEvent *>(event); + lastFocusReason = focusEvent->reason(); + return false; + } else + return QObject::eventFilter(watched, event); + } +public: + Qt::FocusReason lastFocusReason; +}; + QML_DECLARE_TYPE(KeyTestItem); class HollowTestItem : public QQuickItem @@ -1961,6 +1980,62 @@ void tst_QQuickItem::keyNavigation_implicitSetting() delete window; } +void tst_QQuickItem::keyNavigation_focusReason() +{ + QQuickView *window = new QQuickView(0); + window->setBaseSize(QSize(240,320)); + + FocusEventFilter focusEventFilter; + + window->setSource(testFileUrl("keynavigationtest.qml")); + window->show(); + window->requestActivate(); + + QVERIFY(QTest::qWaitForWindowActive(window)); + QVERIFY(QGuiApplication::focusWindow() == window); + + // install event filter on first item + QQuickItem *item = findItem<QQuickItem>(window->rootObject(), "item1"); + QVERIFY(item); + QVERIFY(item->hasActiveFocus()); + item->installEventFilter(&focusEventFilter); + + //install event filter on second item + item = findItem<QQuickItem>(window->rootObject(), "item2"); + QVERIFY(item); + item->installEventFilter(&focusEventFilter); + + //install event filter on third item + item = findItem<QQuickItem>(window->rootObject(), "item3"); + QVERIFY(item); + item->installEventFilter(&focusEventFilter); + + //install event filter on last item + item = findItem<QQuickItem>(window->rootObject(), "item4"); + QVERIFY(item); + item->installEventFilter(&focusEventFilter); + + // tab + QKeyEvent key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier, "", false, 1); + QGuiApplication::sendEvent(window, &key); + QVERIFY(key.isAccepted()); + QCOMPARE(focusEventFilter.lastFocusReason, Qt::TabFocusReason); + + // backtab + key = QKeyEvent(QEvent::KeyPress, Qt::Key_Backtab, Qt::NoModifier, "", false, 1); + QGuiApplication::sendEvent(window, &key); + QVERIFY(key.isAccepted()); + QCOMPARE(focusEventFilter.lastFocusReason, Qt::BacktabFocusReason); + + // some arbitrary cursor key + key = QKeyEvent(QEvent::KeyPress, Qt::Key_Right, Qt::NoModifier, "", false, 1); + QGuiApplication::sendEvent(window, &key); + QVERIFY(key.isAccepted()); + QCOMPARE(focusEventFilter.lastFocusReason, Qt::OtherFocusReason); + + delete window; +} + void tst_QQuickItem::smooth() { QQmlComponent component(&engine); @@ -2737,6 +2812,41 @@ void tst_QQuickItem::childAt() QCOMPARE(parent.childAt(300, 300), static_cast<QQuickItem *>(0)); } +void tst_QQuickItem::grab() +{ + QQuickView view; + view.setSource(testFileUrl("grabToImage.qml")); + view.show(); + QTest::qWaitForWindowExposed(&view); + + QQuickItem *root = qobject_cast<QQuickItem *>(view.rootObject()); + QVERIFY(root); + QQuickItem *item = root->findChild<QQuickItem *>("myItem"); + QVERIFY(item); + + { // Default size (item is 100x100) + QSharedPointer<QQuickItemGrabResult> result = item->grabToImage(); + QSignalSpy spy(result.data(), SIGNAL(ready())); + QTRY_VERIFY(spy.size() > 0); + QVERIFY(!result->url().isEmpty()); + QImage image = result->image(); + QCOMPARE(image.pixel(0, 0), qRgb(255, 0, 0)); + QCOMPARE(image.pixel(99, 99), qRgb(0, 0, 255)); + } + + { // Smaller size + QSharedPointer<QQuickItemGrabResult> result = item->grabToImage(QSize(50, 50)); + QVERIFY(!result.isNull()); + QSignalSpy spy(result.data(), SIGNAL(ready())); + QTRY_VERIFY(spy.size() > 0); + QVERIFY(!result->url().isEmpty()); + QImage image = result->image(); + QCOMPARE(image.pixel(0, 0), qRgb(255, 0, 0)); + QCOMPARE(image.pixel(49, 49), qRgb(0, 0, 255)); + } + +} + QTEST_MAIN(tst_QQuickItem) |