tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp
branchRCL_3
changeset 7 3f74d0d4af4c
parent 4 3b1da2848fc7
child 13 c0432d11811c
--- a/tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp	Mon Mar 15 12:43:09 2010 +0200
+++ b/tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp	Thu Apr 08 14:19:33 2010 +0300
@@ -3426,85 +3426,106 @@
     scene.setItemIndexMethod(QGraphicsScene::NoIndex);
     QGraphicsProxyWidget *proxy = scene.addWidget(new QLineEdit);
 
-    EventSpy proxySpy(proxy);
-    EventSpy widgetSpy(proxy->widget());
-
     QGraphicsView view(&scene);
-    view.setFrameStyle(0);
-    view.resize(300, 300);
-    view.show();
+
+    {
+        EventSpy proxySpy(proxy);
+        EventSpy widgetSpy(proxy->widget());
+
+        view.setFrameStyle(0);
+        view.resize(300, 300);
+        view.show();
 #ifdef Q_WS_X11
-    qt_x11_wait_for_window_manager(&view);
+        qt_x11_wait_for_window_manager(&view);
 #endif
-    QApplication::setActiveWindow(&view);
-    QTest::qWait(25);
-    QTRY_COMPARE(QApplication::activeWindow(), &view);
-
-    QVERIFY(!proxy->hasFocus());
-    QVERIFY(!proxy->widget()->hasFocus());
-
-    QCOMPARE(proxySpy.counts[QEvent::FocusIn], 0);
-    QCOMPARE(proxySpy.counts[QEvent::FocusOut], 0);
-    QCOMPARE(widgetSpy.counts[QEvent::FocusIn], 0);
-    QCOMPARE(widgetSpy.counts[QEvent::FocusOut], 0);
-
-    QPointF lineEditCenter = proxy->mapToScene(proxy->boundingRect().center());
-    // Spontaneous mouse click sets focus on a clickable widget.
-    for (int retry = 0; retry < 50 && !proxy->hasFocus(); retry++)
-        QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(lineEditCenter));
-    QVERIFY(proxy->hasFocus());
-    QVERIFY(proxy->widget()->hasFocus());
-    QCOMPARE(proxySpy.counts[QEvent::FocusIn], 1);
-    QCOMPARE(widgetSpy.counts[QEvent::FocusIn], 1);
-
-    scene.setFocusItem(0);
-    QVERIFY(!proxy->hasFocus());
-    QVERIFY(!proxy->widget()->hasFocus());
-    QCOMPARE(proxySpy.counts[QEvent::FocusOut], 1);
-    QCOMPARE(widgetSpy.counts[QEvent::FocusOut], 1);
-
-    // Non-spontaneous mouse click sets focus if the widget has been clicked before
-    {
-        QGraphicsSceneMouseEvent event(QEvent::GraphicsSceneMousePress);
-        event.setScenePos(lineEditCenter);
-        event.setButton(Qt::LeftButton);
-        qApp->sendEvent(&scene, &event);
+        QApplication::setActiveWindow(&view);
+        QTest::qWait(25);
+        QTRY_COMPARE(QApplication::activeWindow(), &view);
+
+        QVERIFY(!proxy->hasFocus());
+        QVERIFY(!proxy->widget()->hasFocus());
+
+        QCOMPARE(proxySpy.counts[QEvent::FocusIn], 0);
+        QCOMPARE(proxySpy.counts[QEvent::FocusOut], 0);
+        QCOMPARE(widgetSpy.counts[QEvent::FocusIn], 0);
+        QCOMPARE(widgetSpy.counts[QEvent::FocusOut], 0);
+
+        QPointF lineEditCenter = proxy->mapToScene(proxy->boundingRect().center());
+        // Spontaneous mouse click sets focus on a clickable widget.
+        for (int retry = 0; retry < 50 && !proxy->hasFocus(); retry++)
+            QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(lineEditCenter));
         QVERIFY(proxy->hasFocus());
         QVERIFY(proxy->widget()->hasFocus());
-        QCOMPARE(proxySpy.counts[QEvent::FocusIn], 2);
-        QCOMPARE(widgetSpy.counts[QEvent::FocusIn], 2);
+        QCOMPARE(proxySpy.counts[QEvent::FocusIn], 1);
+        QCOMPARE(widgetSpy.counts[QEvent::FocusIn], 1);
+
+        scene.setFocusItem(0);
+        QVERIFY(!proxy->hasFocus());
+        QVERIFY(!proxy->widget()->hasFocus());
+        QCOMPARE(proxySpy.counts[QEvent::FocusOut], 1);
+        QCOMPARE(widgetSpy.counts[QEvent::FocusOut], 1);
+
+        // Non-spontaneous mouse click sets focus if the widget has been clicked before
+        {
+            QGraphicsSceneMouseEvent event(QEvent::GraphicsSceneMousePress);
+            event.setScenePos(lineEditCenter);
+            event.setButton(Qt::LeftButton);
+            qApp->sendEvent(&scene, &event);
+            QVERIFY(proxy->hasFocus());
+            QVERIFY(proxy->widget()->hasFocus());
+            QCOMPARE(proxySpy.counts[QEvent::FocusIn], 2);
+            QCOMPARE(widgetSpy.counts[QEvent::FocusIn], 2);
+        }
     }
 
     scene.setFocusItem(0);
     proxy->setWidget(new QLineEdit); // resets focusWidget
-    QVERIFY(!proxy->hasFocus());
-    QVERIFY(!proxy->widget()->hasFocus());
-    QCOMPARE(proxySpy.counts[QEvent::FocusOut], 2);
-    QCOMPARE(widgetSpy.counts[QEvent::FocusOut], 2);
-
-    // Non-spontaneous mouse click does not set focus on the embedded widget.
+
     {
-        QGraphicsSceneMouseEvent event(QEvent::GraphicsSceneMousePress);
-        event.setScenePos(lineEditCenter);
-        event.setButton(Qt::LeftButton);
-        qApp->sendEvent(&scene, &event);
+        QPointF lineEditCenter = proxy->mapToScene(proxy->boundingRect().center());
+        EventSpy proxySpy(proxy);
+        EventSpy widgetSpy(proxy->widget());
         QVERIFY(!proxy->hasFocus());
         QVERIFY(!proxy->widget()->hasFocus());
-        QCOMPARE(proxySpy.counts[QEvent::FocusIn], 2);
-        QCOMPARE(widgetSpy.counts[QEvent::FocusIn], 2);
+        QCOMPARE(proxySpy.counts[QEvent::FocusOut], 0);
+        QCOMPARE(widgetSpy.counts[QEvent::FocusOut], 0);
+
+        // Non-spontaneous mouse click does not set focus on the embedded widget.
+        {
+            QGraphicsSceneMouseEvent event(QEvent::GraphicsSceneMousePress);
+            event.setScenePos(lineEditCenter);
+            event.setButton(Qt::LeftButton);
+            qApp->sendEvent(&scene, &event);
+            QVERIFY(!proxy->hasFocus());
+            QVERIFY(!proxy->widget()->hasFocus());
+            QCOMPARE(proxySpy.counts[QEvent::FocusIn], 0);
+            QCOMPARE(widgetSpy.counts[QEvent::FocusIn], 0);
+        }
+
+        scene.setFocusItem(0);
+        QVERIFY(!proxy->hasFocus());
+        QVERIFY(!proxy->widget()->hasFocus());
+        QCOMPARE(proxySpy.counts[QEvent::FocusOut], 0);
+        QCOMPARE(widgetSpy.counts[QEvent::FocusOut], 0);
+
+        // Spontaneous click on non-clickable widget does not give focus.
+        proxy->widget()->setFocusPolicy(Qt::NoFocus);
+        QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(lineEditCenter));
+        QVERIFY(!proxy->hasFocus());
+        QVERIFY(!proxy->widget()->hasFocus());
+
+        // Multiple clicks should only result in one FocusIn.
+        proxy->widget()->setFocusPolicy(Qt::StrongFocus);
+        scene.setFocusItem(0);
+        QVERIFY(!proxy->hasFocus());
+        QVERIFY(!proxy->widget()->hasFocus());
+        QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(lineEditCenter));
+        QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(lineEditCenter));
+        QVERIFY(proxy->hasFocus());
+        QVERIFY(proxy->widget()->hasFocus());
+        QCOMPARE(widgetSpy.counts[QEvent::FocusIn], 1);
+        QCOMPARE(proxySpy.counts[QEvent::FocusIn], 1);
     }
-
-    scene.setFocusItem(0);
-    QVERIFY(!proxy->hasFocus());
-    QVERIFY(!proxy->widget()->hasFocus());
-    QCOMPARE(proxySpy.counts[QEvent::FocusOut], 2);
-    QCOMPARE(widgetSpy.counts[QEvent::FocusOut], 2);
-
-    // Spontaneous click on non-clickable widget does not give focus.
-    proxy->widget()->setFocusPolicy(Qt::NoFocus);
-    QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(lineEditCenter));
-    QVERIFY(!proxy->hasFocus());
-    QVERIFY(!proxy->widget()->hasFocus());
 }
 
 void tst_QGraphicsProxyWidget::windowFrameMargins()