tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp
changeset 3 41300fa6a67c
parent 0 1918ee327afb
child 4 3b1da2848fc7
--- a/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp	Tue Jan 26 12:42:25 2010 +0200
+++ b/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp	Tue Feb 02 00:43:10 2010 +0200
@@ -162,10 +162,14 @@
 class TestWidget : public QGraphicsWidget
 {
 public:
-    inline TestWidget(QGraphicsItem *parent = 0)
+    inline TestWidget(QGraphicsItem *parent = 0, const QString &name = QString())
         : QGraphicsWidget(parent)
         {
             setContentsMargins( 0,0,0,0 );
+            if (name.isEmpty())
+                setData(0, QString::fromAscii("w%1").arg(quintptr(this)));
+            else
+                setData(0, name);
         }
     ~TestWidget()
         {
@@ -352,6 +356,8 @@
 
     QVERIFY( layout->itemAt(0) == widget2 );
 
+    delete widget1;
+
     widget->setLayout(layout);
     delete widget;
 }
@@ -419,7 +425,6 @@
     layout->setAnchor(layout, Qt::AnchorLeft, widget5, Qt::AnchorTop, 10);
     QCOMPARE( layout->count(), 4 );
 
-    // ###: NOT SUPPORTED
     // anchor two edges of a widget (to define width / height)
     QTest::ignoreMessage(QtWarningMsg, "QGraphicsAnchorLayout::addAnchor(): Cannot anchor the item to itself");
     layout->setAnchor(widget5, Qt::AnchorLeft, widget5, Qt::AnchorRight, 10);
@@ -457,6 +462,12 @@
 
     QCOMPARE( layout->count(), 0 );
 
+    delete widget1;
+    delete widget2;
+    delete widget3;
+    delete widget4;
+    delete widget5;
+
     widget->setLayout(layout);
     delete widget;
 }
@@ -516,8 +527,6 @@
     widget->setLayout(layout);
 
     widget->setGeometry(QRectF(0,0,100,100));
-    // ###: this shall change once isValid() is ready
-    // QCOMPARE(layout->isValid(), false);
     QCOMPARE(layout->isValid(), true);
     delete widget;
     }
@@ -694,9 +703,8 @@
     layout2->setAnchor(widget1, Qt::AnchorRight, layout2, Qt::AnchorRight, 1);
     layout2->setAnchor(widget1, Qt::AnchorBottom, layout2, Qt::AnchorBottom, 1);
 
-    // ###: uncomment when simplification bug is solved
-    //widget->setGeometry(QRectF(0,0,100,100));
-    //QCOMPARE(widget1->geometry(), QRectF(51,2,47,96));
+    widget->setGeometry(QRectF(0,0,100,100));
+    QCOMPARE(widget1->geometry(), QRectF(51,2,47,96));
     delete widget;
     }
 
@@ -896,9 +904,6 @@
             << BasicData(-1, Qt::AnchorLeft, 1, Qt::AnchorRight, 20)
             ;
 
-        // ### SIMPLIFICATION BUG FOR ITEM 1
-        // ### remove this when bug is solved
-
         theResult
             << BasicResult(0, QRectF(10, 10, 180, 80) )
             << BasicResult(1, QRectF(10, 80, 10, 10) )
@@ -1664,6 +1669,18 @@
     return widgets[index];
 }
 
+static QRectF truncate(QRectF original)
+{
+    QRectF result;
+
+    result.setX(qRound(original.x() * 1000000) / 1000000.0);
+    result.setY(qRound(original.y() * 1000000) / 1000000.0);
+    result.setWidth(qRound(original.width() * 1000000) / 1000000.0);
+    result.setHeight(qRound(original.height() * 1000000) / 1000000.0);
+
+    return result;
+}
+
 void tst_QGraphicsAnchorLayout1::testBasicLayout()
 {
     QFETCH(QSizeF, size);
@@ -1684,7 +1701,7 @@
     // Create dummy widgets
     QList<QGraphicsWidget *> widgets;
     for (int i = 0; i < widgetCount; ++i) {
-        TestWidget *w = new TestWidget;
+        TestWidget *w = new TestWidget(0, QString::fromAscii("W%1").arg(i));
         widgets << w;
     }
 
@@ -1704,19 +1721,18 @@
     widget->setLayout(layout);
     widget->setContentsMargins(0,0,0,0);
 
-    widget->setMinimumSize(size);
-    widget->setMaximumSize(size);
-
-//    QTest::qWait(500); // layouting is asynchronous..
+    widget->resize(size);
+    QCOMPARE(widget->size(), size);
 
     // Validate
     for (int i = 0; i < result.count(); ++i) {
         const BasicLayoutTestResult item = result[i];
-        QCOMPARE(widgets[item.index]->geometry(), item.rect);
+        QRectF expected = truncate(item.rect);
+        QRectF actual = truncate(widgets[item.index]->geometry());
+
+        QCOMPARE(actual, expected);
     }
 
-    // ###: not supported yet
-/*
     // Test mirrored mode
     widget->setLayoutDirection(Qt::RightToLeft);
     layout->activate();
@@ -1728,10 +1744,13 @@
         if (mirroredRect.isValid()){
             mirroredRect.moveLeft(size.width()-item.rect.width()-item.rect.left());
         }
-        QCOMPARE(widgets[item.index]->geometry(), mirroredRect);
-        delete widgets[item.index];
+        QRectF expected = truncate(mirroredRect);
+        QRectF actual = truncate(widgets[item.index]->geometry());
+
+        QCOMPARE(actual, expected);
     }
-*/
+
+    qDeleteAll(widgets);
     delete widget;
 }
 
@@ -2212,16 +2231,17 @@
     widget->setLayout(layout);
     widget->setContentsMargins(0,0,0,0);
 
-    widget->setMinimumSize(size);
-    widget->setMaximumSize(size);
+    widget->resize(size);
+    QCOMPARE(widget->size(), size);
 
     // Validate
     for (int i = 0; i < result.count(); ++i) {
         const BasicLayoutTestResult item = result[i];
 
         QCOMPARE(widgets[item.index]->geometry(), item.rect);
-        delete widgets[item.index];
     }
+
+    qDeleteAll(widgets);
     delete widget;
 }
 
@@ -2349,7 +2369,7 @@
     QFETCH(bool, valid);
 
     // create objects
-    QGraphicsWidget *widget = new QGraphicsWidget;
+    QGraphicsWidget widget;
     TheAnchorLayout *layout = new TheAnchorLayout;
     TestWidget *childWidget = new TestWidget;
 
@@ -2359,11 +2379,11 @@
     layout->setAnchor( layout, Qt::AnchorTop, childWidget, Qt::AnchorTop, 10 );
     layout->setAnchor( childWidget, Qt::AnchorBottom, layout, Qt::AnchorBottom, 10 );
 
-    widget->setLayout( layout );
+    widget.setLayout( layout );
 
     // set test case specific: policy and size
     childWidget->setSizePolicy( policy );
-    widget->setGeometry( QRectF( QPoint(0,0), size ) );
+    widget.setGeometry( QRectF( QPoint(0,0), size ) );
 
     QCOMPARE( layout->isValid() , valid );
 
@@ -2430,6 +2450,8 @@
         QTest::newRow("double size policy: expanding-preferred") << sizePolicy1 << sizePolicy2 << width1 << width2;
     }
 
+    // QGAL handling of ignored flag is different
+    if (0)
     {
         QSizePolicy sizePolicy1( QSizePolicy::Ignored, QSizePolicy::Ignored );
         QSizePolicy sizePolicy2( QSizePolicy::Preferred, QSizePolicy::Preferred );
@@ -2497,16 +2519,13 @@
 
 void tst_QGraphicsAnchorLayout1::testDoubleSizePolicy()
 {
-    // ### Size policy is not yet supported
-    return;
-
     QFETCH(QSizePolicy, policy1);
     QFETCH(QSizePolicy, policy2);
     QFETCH(qreal, width1);
     QFETCH(qreal, width2);
 
     // create objects
-    QGraphicsWidget *widget = new QGraphicsWidget;
+    QGraphicsWidget widget;
     TheAnchorLayout *layout = new TheAnchorLayout;
     TestWidget *childWidget1 = new TestWidget;
     TestWidget *childWidget2 = new TestWidget;
@@ -2516,13 +2535,13 @@
     layout->setAnchor( childWidget1, Qt::AnchorRight, childWidget2, Qt::AnchorLeft, 10 );
     layout->setAnchor( childWidget2, Qt::AnchorRight, layout, Qt::AnchorRight, 10 );
 
-    widget->setLayout( layout );
+    widget.setLayout( layout );
 
     // set test case specific: policy
     childWidget1->setSizePolicy( policy1 );
     childWidget2->setSizePolicy( policy2 );
 
-    widget->setGeometry( QRectF( QPoint(0,0), QSize( 100,100 ) ) );
+    widget.setGeometry( QRectF( QPoint(0,0), QSize( 100,100 ) ) );
 
     // check results:
     if ( width1 == -1.0f ) {
@@ -2639,7 +2658,7 @@
     QFETCH(qreal, width2);
 
     // create objects
-    QGraphicsWidget *widget = new QGraphicsWidget;
+    QGraphicsWidget widget;
     TheAnchorLayout *layout = new TheAnchorLayout;
     TestWidget *childWidget1 = new TestWidget;
     TestWidget *childWidget2 = new TestWidget;
@@ -2649,7 +2668,7 @@
     layout->setAnchor( childWidget1, Qt::AnchorRight, childWidget2, Qt::AnchorLeft, 10 );
     layout->setAnchor( childWidget2, Qt::AnchorRight, layout, Qt::AnchorRight, 10 );
 
-    widget->setLayout( layout );
+    widget.setLayout( layout );
 
     // set test case specific: size hints
     childWidget1->setMinimumWidth( sizeHints1.value( Qt::MinimumSize ) );
@@ -2660,7 +2679,7 @@
     childWidget2->setPreferredWidth( sizeHints2.value( Qt::PreferredSize ) );
     childWidget2->setMaximumWidth( sizeHints2.value( Qt::MaximumSize ) );
 
-    widget->setGeometry( QRectF( QPoint(0,0), QSize( 100,100 ) ) );
+    widget.setGeometry( QRectF( QPoint(0,0), QSize( 100,100 ) ) );
 
     // check results:
     if ( width1 == -1.0f ) {
@@ -3053,8 +3072,8 @@
     widget->setLayout(layout);
     widget->setContentsMargins(0,0,0,0);
 
-    widget->setMinimumSize(size);
-    widget->setMaximumSize(size);
+    widget->resize(size);
+    QCOMPARE(widget->size(), size);
 
 //    QTest::qWait(500); // layouting is asynchronous..