tests/auto/qwidget/tst_qwidget.cpp
changeset 37 758a864f9613
parent 33 3e2da88830cd
--- a/tests/auto/qwidget/tst_qwidget.cpp	Fri Sep 17 08:34:18 2010 +0300
+++ b/tests/auto/qwidget/tst_qwidget.cpp	Mon Oct 04 01:19:32 2010 +0300
@@ -402,6 +402,8 @@
 #endif // QT_MAC_USE_COCOA
 #endif
 
+    void nativeChildFocus();
+
 private:
     bool ensureScreenSize(int width, int height);
     QWidget *testWidget;
@@ -9694,7 +9696,6 @@
 
     // Native child widget should once again share parent's backing store
     QVERIFY(0 != backingStore(parent));
-    QEXPECT_FAIL("", "QTBUG-10643", Continue);
     QVERIFY(0 == backingStore(child));
     }
 
@@ -9743,7 +9744,6 @@
     QVERIFY(0 != backingStore(child));
 
     // Parent is obscured, therefore its backing store should be destroyed
-    QEXPECT_FAIL("", "QTBUG-10643", Continue);
     QVERIFY(0 == backingStore(parent));
 
     // Disable full screen
@@ -9757,9 +9757,82 @@
 
     // Native child widget should once again share parent's backing store
     QVERIFY(0 != backingStore(parent));
-    QEXPECT_FAIL("", "QTBUG-10643", Continue);
     QVERIFY(0 == backingStore(child));
     }
+
+    // 6. Partial reveal followed by full reveal
+    {
+    QWidget upper;
+    upper.setAutoFillBackground(true);
+    upper.setPalette(Qt::red);
+    upper.setGeometry(50, 50, 100, 100);
+
+    QWidget lower;
+    lower.setAutoFillBackground(true);
+    lower.setPalette(Qt::green);
+    lower.setGeometry(50, 50, 100, 100);
+
+    lower.show();
+    QTest::qWaitForWindowShown(&lower);
+    upper.show();
+    QTest::qWaitForWindowShown(&upper);
+    upper.raise();
+
+    QVERIFY(0 != backingStore(upper));
+    QVERIFY(0 == backingStore(lower));
+
+    // Check that upper obscures lower
+    QVERIFY(lower.visibleRegion().subtracted(upper.visibleRegion()).isEmpty());
+
+    // Partially reveal lower
+    upper.move(100, 100);
+
+    // Completely reveal lower
+    upper.hide();
+
+    // Hide lower widget - this should cause its backing store to be deleted
+    lower.hide();
+
+    // Check that backing store was deleted
+    WAIT_AND_VERIFY(0 == backingStore(lower));
+    }
+
+    // 7. Reparenting of visible native child widget
+    {
+    QWidget parent1;
+    parent1.setAutoFillBackground(true);
+    parent1.setPalette(Qt::green);
+    parent1.setGeometry(50, 50, 100, 100);
+
+    QWidget *child = new QWidget(&parent1);
+    child->winId();
+    child->setAutoFillBackground(true);
+    child->setPalette(Qt::red);
+    child->setGeometry(10, 10, 30, 30);
+
+    QWidget parent2;
+    parent2.setAutoFillBackground(true);
+    parent2.setPalette(Qt::blue);
+    parent2.setGeometry(150, 150, 100, 100);
+
+    parent1.show();
+    QTest::qWaitForWindowShown(&parent1);
+    QVERIFY(0 != backingStore(parent1));
+
+    parent2.show();
+    QTest::qWaitForWindowShown(&parent2);
+    QVERIFY(0 != backingStore(parent2));
+
+    child->setParent(&parent2);
+    child->setGeometry(10, 10, 30, 30);
+    child->show();
+
+    parent1.hide();
+    WAIT_AND_VERIFY(0 == backingStore(parent1));
+
+    parent2.hide();
+    WAIT_AND_VERIFY(0 == backingStore(parent2));
+    }
 }
 
 #undef WAIT_AND_VERIFY
@@ -10460,5 +10533,28 @@
 #endif // QT_MAC_USE_COCOA
 #endif
 
+void tst_QWidget::nativeChildFocus()
+{
+    QWidget w;
+    QLayout *layout = new QVBoxLayout;
+    w.setLayout(layout);
+    QLineEdit *p1 = new QLineEdit;
+    QLineEdit *p2 = new QLineEdit;
+    layout->addWidget(p1);
+    layout->addWidget(p2);
+    p1->setObjectName("p1");
+    p2->setObjectName("p2");
+    w.show();
+    w.activateWindow();
+    p1->setFocus();
+    p1->setAttribute(Qt::WA_NativeWindow);
+    p2->setAttribute(Qt::WA_NativeWindow);
+    QApplication::processEvents();
+    QTest::qWaitForWindowShown(&w);
+
+    QCOMPARE(QApplication::activeWindow(), &w);
+    QCOMPARE(QApplication::focusWidget(), p1);
+}
+
 QTEST_MAIN(tst_QWidget)
 #include "tst_qwidget.moc"