summaryrefslogtreecommitdiffstats
path: root/tests/auto/qformlayout
diff options
context:
space:
mode:
authorQt by Nokia <qt-info@nokia.com>2011-04-27 12:05:43 +0200
committeraxis <qt-info@nokia.com>2011-04-27 12:05:43 +0200
commit38be0d13830efd2d98281c645c3a60afe05ffece (patch)
tree6ea73f3ec77f7d153333779883e8120f82820abe /tests/auto/qformlayout
Initial import from the monolithic Qt.
This is the beginning of revision history for this module. If you want to look at revision history older than this, please refer to the Qt Git wiki for how to use Git history grafting. At the time of writing, this wiki is located here: http://qt.gitorious.org/qt/pages/GitIntroductionWithQt If you have already performed the grafting and you don't see any history beyond this commit, try running "git log" with the "--follow" argument. Branched from the monolithic repo, Qt master branch, at commit 896db169ea224deb96c59ce8af800d019de63f12
Diffstat (limited to 'tests/auto/qformlayout')
-rw-r--r--tests/auto/qformlayout/.gitignore1
-rw-r--r--tests/auto/qformlayout/qformlayout.pro2
-rw-r--r--tests/auto/qformlayout/tst_qformlayout.cpp910
3 files changed, 913 insertions, 0 deletions
diff --git a/tests/auto/qformlayout/.gitignore b/tests/auto/qformlayout/.gitignore
new file mode 100644
index 0000000000..24e93d561f
--- /dev/null
+++ b/tests/auto/qformlayout/.gitignore
@@ -0,0 +1 @@
+tst_qformlayout
diff --git a/tests/auto/qformlayout/qformlayout.pro b/tests/auto/qformlayout/qformlayout.pro
new file mode 100644
index 0000000000..baeb6741ca
--- /dev/null
+++ b/tests/auto/qformlayout/qformlayout.pro
@@ -0,0 +1,2 @@
+load(qttest_p4)
+SOURCES += tst_qformlayout.cpp
diff --git a/tests/auto/qformlayout/tst_qformlayout.cpp b/tests/auto/qformlayout/tst_qformlayout.cpp
new file mode 100644
index 0000000000..bb33e50fb7
--- /dev/null
+++ b/tests/auto/qformlayout/tst_qformlayout.cpp
@@ -0,0 +1,910 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include <QtTest/QtTest>
+#include <qlayout.h>
+#include <qapplication.h>
+#include <qwidget.h>
+#include <qwindowsstyle.h>
+#include <qsizepolicy.h>
+#include <QtGui>
+
+#include <QtGui/QWindowsStyle>
+#include <QStyleFactory>
+
+#include <qformlayout.h>
+
+//TESTED_CLASS=
+//TESTED_FILES=
+
+class tst_QFormLayout : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_QFormLayout();
+ ~tst_QFormLayout();
+
+public slots:
+ void initTestCase();
+ void cleanupTestCase();
+ void init();
+ void cleanup();
+
+private slots:
+ void rowCount();
+ void buddies();
+ void getItemPosition();
+ void wrapping();
+ void spacing();
+ void contentsRect();
+
+ void setFormStyle();
+ void setFieldGrowthPolicy();
+ void setRowWrapPolicy();
+ void setLabelAlignment();
+ void setFormAlignment();
+
+/*
+ void setHorizontalSpacing(int spacing);
+ int horizontalSpacing() const;
+ void setVerticalSpacing(int spacing);
+ int verticalSpacing() const;
+*/
+
+ void addRow();
+ void insertRow_QWidget_QWidget();
+ void insertRow_QWidget_QLayout();
+ void insertRow_QString_QWidget();
+ void insertRow_QString_QLayout();
+ void insertRow_QWidget();
+ void insertRow_QLayout();
+ void setWidget();
+ void setLayout();
+
+/*
+ QLayoutItem *itemAt(int row, ItemRole role) const;
+ void getItemPosition(int index, int *rowPtr, ItemRole *rolePtr) const;
+ void getLayoutPosition(QWidget *widget, int *rowPtr, ItemRole *rolePtr) const;
+ void getItemPosition(QLayoutItem *item, int *rowPtr, ItemRole *rolePtr) const;
+ QWidget *labelForField(QWidget *widget) const;
+ QWidget *labelForField(QLayoutItem *item) const;
+
+ void addItem(QLayoutItem *item);
+*/
+
+ void itemAt();
+ void takeAt();
+ void layoutAlone();
+/*
+ void setGeometry(const QRect &rect);
+ QSize minimumSize() const;
+ QSize sizeHint() const;
+
+ bool hasHeightForWidth() const;
+ int heightForWidth(int width) const;
+ Qt::Orientations expandingDirections() const;
+*/
+
+};
+
+tst_QFormLayout::tst_QFormLayout()
+{
+}
+
+tst_QFormLayout::~tst_QFormLayout()
+{
+}
+
+void tst_QFormLayout::initTestCase()
+{
+}
+
+void tst_QFormLayout::cleanupTestCase()
+{
+}
+
+void tst_QFormLayout::init()
+{
+}
+
+void tst_QFormLayout::cleanup()
+{
+}
+
+void tst_QFormLayout::rowCount()
+{
+ QWidget *w = new QWidget;
+ QFormLayout *fl = new QFormLayout(w);
+
+ fl->addRow(tr("Label 1"), new QLineEdit);
+ fl->addRow(tr("Label 2"), new QLineEdit);
+ fl->addRow(tr("Label 3"), new QLineEdit);
+ QCOMPARE(fl->rowCount(), 3);
+
+ fl->addRow(new QWidget);
+ fl->addRow(new QHBoxLayout);
+ QCOMPARE(fl->rowCount(), 5);
+
+ fl->insertRow(1, tr("Label 0.5"), new QLineEdit);
+ QCOMPARE(fl->rowCount(), 6);
+
+ //TODO: remove items
+
+ delete w;
+}
+
+void tst_QFormLayout::buddies()
+{
+ QWidget *w = new QWidget;
+ QFormLayout *fl = new QFormLayout(w);
+
+ //normal buddy case
+ QLineEdit *le = new QLineEdit;
+ fl->addRow(tr("Label 1"), le);
+ QLabel *label = qobject_cast<QLabel *>(fl->labelForField(le));
+ QVERIFY(label);
+ QWidget *lew = le;
+ QCOMPARE(label->buddy(), lew);
+
+ //null label
+ QLineEdit *le2 = new QLineEdit;
+ fl->addRow(0, le2);
+ QWidget *label2 = fl->labelForField(le2);
+ QVERIFY(label2 == 0);
+
+ //no label
+ QLineEdit *le3 = new QLineEdit;
+ fl->addRow(le3);
+ QWidget *label3 = fl->labelForField(le3);
+ QVERIFY(label3 == 0);
+
+ //TODO: empty label?
+
+ delete w;
+}
+
+void tst_QFormLayout::getItemPosition()
+{
+ QWidget *w = new QWidget;
+ QFormLayout *fl = new QFormLayout(w);
+
+ QList<QLabel*> labels;
+ QList<QLineEdit*> fields;
+ for (int i = 0; i < 5; ++i) {
+ labels.append(new QLabel(QString("Label %1").arg(i+1)));
+ fields.append(new QLineEdit);
+ fl->addRow(labels[i], fields[i]);
+ }
+
+ //a field
+ {
+ int row;
+ QFormLayout::ItemRole role;
+ fl->getWidgetPosition(fields[3], &row, &role);
+ QCOMPARE(row, 3);
+ QCOMPARE(role, QFormLayout::FieldRole);
+ }
+
+ //a label
+ {
+ int row;
+ QFormLayout::ItemRole role;
+ fl->getWidgetPosition(labels[2], &row, &role);
+ QCOMPARE(row, 2);
+ QCOMPARE(role, QFormLayout::LabelRole);
+ }
+
+ //a layout that's been inserted
+ {
+ QVBoxLayout *vbl = new QVBoxLayout;
+ fl->insertRow(2, "Label 1.5", vbl);
+ int row;
+ QFormLayout::ItemRole role;
+ fl->getLayoutPosition(vbl, &row, &role);
+ QCOMPARE(row, 2);
+ QCOMPARE(role, QFormLayout::FieldRole);
+ }
+
+ delete w;
+}
+
+void tst_QFormLayout::wrapping()
+{
+ QWidget *w = new QWidget;
+ QFormLayout *fl = new QFormLayout(w);
+ fl->setRowWrapPolicy(QFormLayout::WrapLongRows);
+
+ QLineEdit *le = new QLineEdit;
+ QLabel *lbl = new QLabel("A long label");
+ le->setMinimumWidth(200);
+ fl->addRow(lbl, le);
+
+ w->setFixedWidth(240);
+ w->show();
+
+ QCOMPARE(le->geometry().y() > lbl->geometry().y(), true);
+
+ //TODO: additional tests covering different wrapping cases
+
+ delete w;
+}
+
+class CustomLayoutStyle : public QWindowsStyle
+{
+ Q_OBJECT
+public:
+ CustomLayoutStyle()
+ {
+ hspacing = 5;
+ vspacing = 10;
+ }
+
+ virtual int pixelMetric(PixelMetric metric, const QStyleOption * option = 0,
+ const QWidget * widget = 0 ) const;
+
+ int hspacing;
+ int vspacing;
+};
+
+int CustomLayoutStyle::pixelMetric(PixelMetric metric, const QStyleOption * option /*= 0*/,
+ const QWidget * widget /*= 0*/ ) const
+{
+ switch (metric) {
+ case PM_LayoutHorizontalSpacing:
+ return hspacing;
+ case PM_LayoutVerticalSpacing:
+ return vspacing;
+ break;
+ default:
+ break;
+ }
+ return QWindowsStyle::pixelMetric(metric, option, widget);
+}
+
+void tst_QFormLayout::spacing()
+{
+ //TODO: confirm spacing behavior
+ QWidget *w = new QWidget;
+ CustomLayoutStyle *style = new CustomLayoutStyle;
+ style->hspacing = 5;
+ style->vspacing = 10;
+ w->setStyle(style);
+ QFormLayout *fl = new QFormLayout(w);
+ QCOMPARE(style->hspacing, fl->horizontalSpacing());
+ QCOMPARE(style->vspacing, fl->verticalSpacing());
+
+ //QCOMPARE(fl->spacing(), -1);
+ fl->setVerticalSpacing(5);
+ QCOMPARE(5, fl->horizontalSpacing());
+ QCOMPARE(5, fl->verticalSpacing());
+ //QCOMPARE(fl->spacing(), 5);
+ fl->setVerticalSpacing(-1);
+ QCOMPARE(style->hspacing, fl->horizontalSpacing());
+ QCOMPARE(style->vspacing, fl->verticalSpacing());
+
+ style->hspacing = 5;
+ style->vspacing = 5;
+ //QCOMPARE(fl->spacing(), 5);
+
+ fl->setHorizontalSpacing(20);
+ //QCOMPARE(fl->spacing(), -1);
+ style->vspacing = 20;
+ QCOMPARE(fl->horizontalSpacing(), 20);
+ QCOMPARE(fl->verticalSpacing(), 20);
+ //QCOMPARE(fl->spacing(), 20);
+ fl->setHorizontalSpacing(-1);
+ //QCOMPARE(fl->spacing(), -1);
+ style->hspacing = 20;
+ //QCOMPARE(fl->spacing(), 20);
+
+ delete w;
+ delete style;
+}
+
+void tst_QFormLayout::contentsRect()
+{
+ QWidget w;
+ QFormLayout form;
+ w.setLayout(&form);
+ form.addRow("Label", new QPushButton(&w));
+ w.show();
+/*#if defined(Q_WS_X11)
+ qt_x11_wait_for_window_manager(&w); // wait for the show
+#endif*/
+ int l, t, r, b;
+ form.getContentsMargins(&l, &t, &r, &b);
+ QRect geom = form.geometry();
+
+ QCOMPARE(geom.adjusted(+l, +t, -r, -b), form.contentsRect());
+}
+
+
+class DummyMacStyle : public QCommonStyle
+{
+public:
+ virtual int styleHint ( StyleHint hint, const QStyleOption * option = 0, const QWidget * widget = 0, QStyleHintReturn * returnData = 0 ) const
+ {
+ switch(hint) {
+ case SH_FormLayoutFormAlignment:
+ return Qt::AlignHCenter | Qt::AlignTop;
+ case SH_FormLayoutLabelAlignment:
+ return Qt::AlignRight;
+ case SH_FormLayoutWrapPolicy:
+ return QFormLayout::DontWrapRows;
+ case SH_FormLayoutFieldGrowthPolicy:
+ return QFormLayout::FieldsStayAtSizeHint;
+ default:
+ return QCommonStyle::styleHint(hint, option, widget, returnData);
+ }
+ }
+};
+
+class DummyQtopiaStyle : public QCommonStyle
+{
+public:
+ virtual int styleHint ( StyleHint hint, const QStyleOption * option = 0, const QWidget * widget = 0, QStyleHintReturn * returnData = 0 ) const
+ {
+ switch(hint) {
+ case SH_FormLayoutFormAlignment:
+ return Qt::AlignLeft | Qt::AlignTop;
+ case SH_FormLayoutLabelAlignment:
+ return Qt::AlignRight;
+ case SH_FormLayoutWrapPolicy:
+ return QFormLayout::WrapLongRows;
+ case SH_FormLayoutFieldGrowthPolicy:
+ return QFormLayout::AllNonFixedFieldsGrow;
+ default:
+ return QCommonStyle::styleHint(hint, option, widget, returnData);
+ }
+ }
+};
+
+void tst_QFormLayout::setFormStyle()
+{
+ QWidget widget;
+ QFormLayout layout;
+ widget.setLayout(&layout);
+
+#ifndef QT_NO_STYLE_PLASTIQUE
+ widget.setStyle(new QPlastiqueStyle());
+
+ QVERIFY(layout.labelAlignment() == Qt::AlignRight);
+ QVERIFY(layout.formAlignment() == (Qt::AlignLeft | Qt::AlignTop));
+ QVERIFY(layout.fieldGrowthPolicy() == QFormLayout::ExpandingFieldsGrow);
+ QVERIFY(layout.rowWrapPolicy() == QFormLayout::DontWrapRows);
+#endif
+
+ widget.setStyle(new QWindowsStyle());
+
+ QVERIFY(layout.labelAlignment() == Qt::AlignLeft);
+ QVERIFY(layout.formAlignment() == (Qt::AlignLeft | Qt::AlignTop));
+ QVERIFY(layout.fieldGrowthPolicy() == QFormLayout::AllNonFixedFieldsGrow);
+ QVERIFY(layout.rowWrapPolicy() == QFormLayout::DontWrapRows);
+
+ /* can't directly create mac style or qtopia style, since
+ this test is cross platform.. so create dummy styles that
+ return all the right stylehints.
+ */
+ widget.setStyle(new DummyMacStyle());
+
+ QVERIFY(layout.labelAlignment() == Qt::AlignRight);
+ QVERIFY(layout.formAlignment() == (Qt::AlignHCenter | Qt::AlignTop));
+ QVERIFY(layout.fieldGrowthPolicy() == QFormLayout::FieldsStayAtSizeHint);
+ QVERIFY(layout.rowWrapPolicy() == QFormLayout::DontWrapRows);
+
+ widget.setStyle(new DummyQtopiaStyle());
+
+ QVERIFY(layout.labelAlignment() == Qt::AlignRight);
+ QVERIFY(layout.formAlignment() == (Qt::AlignLeft | Qt::AlignTop));
+ QVERIFY(layout.fieldGrowthPolicy() == QFormLayout::AllNonFixedFieldsGrow);
+ QVERIFY(layout.rowWrapPolicy() == QFormLayout::WrapLongRows);
+}
+
+void tst_QFormLayout::setFieldGrowthPolicy()
+{
+ QWidget window;
+ QLineEdit fld1, fld2, fld3;
+ fld1.setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+ fld2.setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
+ fld3.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
+
+ QFormLayout layout;
+ layout.addRow("One:", &fld1);
+ layout.addRow("Two:", &fld2);
+ layout.addRow("Three:", &fld3);
+ window.setLayout(&layout);
+ window.resize(1000, 200);
+
+ for (int i = 0; i < 3; ++i) {
+ layout.setFieldGrowthPolicy(i == 0 ? QFormLayout::FieldsStayAtSizeHint :
+ i == 1 ? QFormLayout::ExpandingFieldsGrow :
+ QFormLayout::AllNonFixedFieldsGrow);
+ layout.activate();
+
+ if (i == 0) {
+ QVERIFY(fld1.width() == fld2.width());
+ QVERIFY(fld2.width() == fld3.width());
+ } else if (i == 1) {
+ QVERIFY(fld1.width() == fld2.width());
+ QVERIFY(fld2.width() < fld3.width());
+ } else {
+ QVERIFY(fld1.width() < fld2.width());
+ QVERIFY(fld2.width() == fld3.width());
+ }
+ }
+}
+
+void tst_QFormLayout::setRowWrapPolicy()
+{
+}
+
+void tst_QFormLayout::setLabelAlignment()
+{
+}
+
+void tst_QFormLayout::setFormAlignment()
+{
+}
+
+void tst_QFormLayout::addRow()
+{
+ QFormLayout layout;
+ QWidget w1, w2, w3;
+ QHBoxLayout l1, l2, l3;
+ QLabel lbl1, lbl2;
+
+ QCOMPARE(layout.rowCount(), 0);
+
+ layout.addRow(&lbl1, &w1);
+ layout.addRow(&lbl2, &l1);
+ layout.addRow("Foo:", &w2);
+ layout.addRow("Bar:", &l2);
+ layout.addRow(&w3);
+ layout.addRow(&l3);
+
+ QCOMPARE(layout.rowCount(), 6);
+
+ QVERIFY(layout.itemAt(0, QFormLayout::LabelRole)->widget() == &lbl1);
+ QVERIFY(layout.itemAt(1, QFormLayout::LabelRole)->widget() == &lbl2);
+ QVERIFY(layout.itemAt(2, QFormLayout::LabelRole)->widget()->property("text") == "Foo:");
+ QVERIFY(layout.itemAt(3, QFormLayout::LabelRole)->widget()->property("text") == "Bar:");
+ QVERIFY(layout.itemAt(4, QFormLayout::LabelRole) == 0);
+ QVERIFY(layout.itemAt(5, QFormLayout::LabelRole) == 0);
+
+ QVERIFY(layout.itemAt(0, QFormLayout::FieldRole)->widget() == &w1);
+ QVERIFY(layout.itemAt(1, QFormLayout::FieldRole)->layout() == &l1);
+ QVERIFY(layout.itemAt(2, QFormLayout::FieldRole)->widget() == &w2);
+ QVERIFY(layout.itemAt(3, QFormLayout::FieldRole)->layout() == &l2);
+// ### should have a third role, FullRowRole?
+// QVERIFY(layout.itemAt(4, QFormLayout::FieldRole) == 0);
+// QVERIFY(layout.itemAt(5, QFormLayout::FieldRole) == 0);
+}
+
+void tst_QFormLayout::insertRow_QWidget_QWidget()
+{
+ QFormLayout layout;
+ QLabel lbl1, lbl2, lbl3, lbl4;
+ QLineEdit fld1, fld2, fld3, fld4;
+
+ layout.insertRow(0, &lbl1, &fld1);
+ QCOMPARE(layout.rowCount(), 1);
+
+ {
+ int row = -1;
+ QFormLayout::ItemRole role = QFormLayout::ItemRole(-123);
+ layout.getWidgetPosition(&lbl1, &row, &role);
+ QCOMPARE(row, 0);
+ QCOMPARE(int(role), int(QFormLayout::LabelRole));
+ }
+
+ {
+ int row = -1;
+ QFormLayout::ItemRole role = QFormLayout::ItemRole(-123);
+ layout.getWidgetPosition(&fld1, &row, &role);
+ QCOMPARE(row, 0);
+ QCOMPARE(int(role), int(QFormLayout::FieldRole));
+ }
+
+ // check that negative values append
+ layout.insertRow(-2, &lbl2, &fld2);
+ QCOMPARE(layout.rowCount(), 2);
+
+ QVERIFY(layout.itemAt(0, QFormLayout::LabelRole)->widget() == &lbl1);
+ QVERIFY(layout.itemAt(1, QFormLayout::LabelRole)->widget() == &lbl2);
+
+ // check that too large values append
+ layout.insertRow(100, &lbl3, &fld3);
+ QCOMPARE(layout.rowCount(), 3);
+ QCOMPARE(layout.count(), 6);
+
+ layout.insertRow(3, (QWidget *)0, (QWidget *)0);
+ QCOMPARE(layout.rowCount(), 4);
+ QCOMPARE(layout.count(), 6);
+
+ layout.insertRow(4, (QWidget *)0, &fld4);
+ QCOMPARE(layout.rowCount(), 5);
+ QCOMPARE(layout.count(), 7);
+
+ layout.insertRow(5, &lbl4, (QWidget *)0);
+ QCOMPARE(layout.rowCount(), 6);
+ QCOMPARE(layout.count(), 8);
+
+ QVERIFY(layout.itemAt(0, QFormLayout::LabelRole)->widget() == &lbl1);
+ QVERIFY(layout.itemAt(1, QFormLayout::LabelRole)->widget() == &lbl2);
+ QVERIFY(layout.itemAt(2, QFormLayout::LabelRole)->widget() == &lbl3);
+ QVERIFY(layout.itemAt(3, QFormLayout::LabelRole) == 0);
+ QVERIFY(layout.itemAt(4, QFormLayout::LabelRole) == 0);
+ QVERIFY(layout.itemAt(5, QFormLayout::LabelRole)->widget() == &lbl4);
+
+ QVERIFY(layout.itemAt(0, QFormLayout::FieldRole)->widget() == &fld1);
+ QVERIFY(layout.itemAt(1, QFormLayout::FieldRole)->widget() == &fld2);
+ QVERIFY(layout.itemAt(2, QFormLayout::FieldRole)->widget() == &fld3);
+ QVERIFY(layout.itemAt(3, QFormLayout::FieldRole) == 0);
+ QVERIFY(layout.itemAt(4, QFormLayout::FieldRole)->widget() == &fld4);
+ QVERIFY(layout.itemAt(5, QFormLayout::FieldRole) == 0);
+}
+
+void tst_QFormLayout::insertRow_QWidget_QLayout()
+{
+ QFormLayout layout;
+ QLabel lbl1, lbl2, lbl3, lbl4;
+ QHBoxLayout fld1, fld2, fld3, fld4;
+
+ layout.insertRow(0, &lbl1, &fld1);
+ QCOMPARE(layout.rowCount(), 1);
+
+ {
+ int row = -1;
+ QFormLayout::ItemRole role = QFormLayout::ItemRole(-123);
+ layout.getWidgetPosition(&lbl1, &row, &role);
+ QCOMPARE(row, 0);
+ QCOMPARE(int(role), int(QFormLayout::LabelRole));
+ }
+
+ {
+ int row = -1;
+ QFormLayout::ItemRole role = QFormLayout::ItemRole(-123);
+ layout.getLayoutPosition(&fld1, &row, &role);
+ QCOMPARE(row, 0);
+ QCOMPARE(int(role), int(QFormLayout::FieldRole));
+ }
+
+ // check that negative values append
+ layout.insertRow(-2, &lbl2, &fld2);
+ QCOMPARE(layout.rowCount(), 2);
+
+ QVERIFY(layout.itemAt(0, QFormLayout::LabelRole)->widget() == &lbl1);
+ QVERIFY(layout.itemAt(1, QFormLayout::LabelRole)->widget() == &lbl2);
+
+ // check that too large values append
+ layout.insertRow(100, &lbl3, &fld3);
+ QCOMPARE(layout.rowCount(), 3);
+
+ QVERIFY(layout.itemAt(0, QFormLayout::LabelRole)->widget() == &lbl1);
+ QVERIFY(layout.itemAt(1, QFormLayout::LabelRole)->widget() == &lbl2);
+ QVERIFY(layout.itemAt(2, QFormLayout::LabelRole)->widget() == &lbl3);
+
+ QVERIFY(layout.itemAt(0, QFormLayout::FieldRole)->layout() == &fld1);
+ QVERIFY(layout.itemAt(1, QFormLayout::FieldRole)->layout() == &fld2);
+ QVERIFY(layout.itemAt(2, QFormLayout::FieldRole)->layout() == &fld3);
+}
+
+void tst_QFormLayout::insertRow_QString_QWidget()
+{
+ QFormLayout layout;
+ QLineEdit fld1, fld2, fld3;
+
+ layout.insertRow(-5, "&Name:", &fld1);
+ QLabel *label1 = qobject_cast<QLabel *>(layout.itemAt(0, QFormLayout::LabelRole)->widget());
+ QVERIFY(label1 != 0);
+ QVERIFY(label1->buddy() == &fld1);
+
+ layout.insertRow(0, "&Email:", &fld2);
+ QLabel *label2 = qobject_cast<QLabel *>(layout.itemAt(0, QFormLayout::LabelRole)->widget());
+ QVERIFY(label2 != 0);
+ QVERIFY(label2->buddy() == &fld2);
+
+ layout.insertRow(5, "&Age:", &fld3);
+ QLabel *label3 = qobject_cast<QLabel *>(layout.itemAt(2, QFormLayout::LabelRole)->widget());
+ QVERIFY(label3 != 0);
+ QVERIFY(label3->buddy() == &fld3);
+}
+
+void tst_QFormLayout::insertRow_QString_QLayout()
+{
+ QFormLayout layout;
+ QHBoxLayout fld1, fld2, fld3;
+
+ layout.insertRow(-5, "&Name:", &fld1);
+ QLabel *label1 = qobject_cast<QLabel *>(layout.itemAt(0, QFormLayout::LabelRole)->widget());
+ QVERIFY(label1 != 0);
+ QVERIFY(label1->buddy() == 0);
+
+ QCOMPARE(layout.rowCount(), 1);
+
+ layout.insertRow(0, "&Email:", &fld2);
+ QLabel *label2 = qobject_cast<QLabel *>(layout.itemAt(0, QFormLayout::LabelRole)->widget());
+ QVERIFY(label2 != 0);
+ QVERIFY(label2->buddy() == 0);
+
+ QCOMPARE(layout.rowCount(), 2);
+
+ layout.insertRow(5, "&Age:", &fld3);
+ QLabel *label3 = qobject_cast<QLabel *>(layout.itemAt(2, QFormLayout::LabelRole)->widget());
+ QVERIFY(label3 != 0);
+ QVERIFY(label3->buddy() == 0);
+
+ QCOMPARE(layout.rowCount(), 3);
+}
+
+void tst_QFormLayout::insertRow_QWidget()
+{
+ // ### come back to this later
+}
+
+void tst_QFormLayout::insertRow_QLayout()
+{
+ // ### come back to this later
+}
+
+void tst_QFormLayout::setWidget()
+{
+ QFormLayout layout;
+
+ QWidget w1;
+ QWidget w2;
+ QWidget w3;
+ QWidget w4;
+
+ QCOMPARE(layout.count(), 0);
+ QCOMPARE(layout.rowCount(), 0);
+
+ layout.setWidget(5, QFormLayout::LabelRole, &w1);
+ QCOMPARE(layout.count(), 1);
+ QCOMPARE(layout.rowCount(), 6);
+
+ layout.setWidget(3, QFormLayout::FieldRole, &w2);
+ layout.setWidget(3, QFormLayout::LabelRole, &w3);
+ QCOMPARE(layout.count(), 3);
+ QCOMPARE(layout.rowCount(), 6);
+
+ // should be ignored and generate warnings
+ layout.setWidget(3, QFormLayout::FieldRole, &w4);
+ layout.setWidget(-1, QFormLayout::FieldRole, &w4);
+
+ {
+ int row = -1;
+ QFormLayout::ItemRole role = QFormLayout::ItemRole(-123);
+ layout.getWidgetPosition(&w1, &row, &role);
+ QCOMPARE(row, 5);
+ QCOMPARE(int(role), int(QFormLayout::LabelRole));
+ }
+
+ {
+ int row = -1;
+ QFormLayout::ItemRole role = QFormLayout::ItemRole(-123);
+ layout.getWidgetPosition(&w2, &row, &role);
+ QCOMPARE(row, 3);
+ QCOMPARE(int(role), int(QFormLayout::FieldRole));
+ }
+
+ {
+ int row = -1;
+ QFormLayout::ItemRole role = QFormLayout::ItemRole(-123);
+ layout.getWidgetPosition(&w3, &row, &role);
+ QCOMPARE(row, 3);
+ QCOMPARE(int(role), int(QFormLayout::LabelRole));
+ }
+
+ {
+ int row = -1;
+ QFormLayout::ItemRole role = QFormLayout::ItemRole(-123);
+ layout.getWidgetPosition(&w4, &row, &role);
+ QCOMPARE(row, -1);
+ QCOMPARE(int(role), -123);
+ }
+
+ {
+ int row = -1;
+ QFormLayout::ItemRole role = QFormLayout::ItemRole(-123);
+ layout.getWidgetPosition(0, &row, &role);
+ QCOMPARE(row, -1);
+ QCOMPARE(int(role), -123);
+ }
+}
+
+void tst_QFormLayout::setLayout()
+{
+ QFormLayout layout;
+
+ QHBoxLayout l1;
+ QHBoxLayout l2;
+ QHBoxLayout l3;
+ QHBoxLayout l4;
+
+ QCOMPARE(layout.count(), 0);
+ QCOMPARE(layout.rowCount(), 0);
+
+ layout.setLayout(5, QFormLayout::LabelRole, &l1);
+ QCOMPARE(layout.count(), 1);
+ QCOMPARE(layout.rowCount(), 6);
+
+ layout.setLayout(3, QFormLayout::FieldRole, &l2);
+ layout.setLayout(3, QFormLayout::LabelRole, &l3);
+ QCOMPARE(layout.count(), 3);
+ QCOMPARE(layout.rowCount(), 6);
+
+ // should be ignored and generate warnings
+ layout.setLayout(3, QFormLayout::FieldRole, &l4);
+ layout.setLayout(-1, QFormLayout::FieldRole, &l4);
+ QCOMPARE(layout.count(), 3);
+ QCOMPARE(layout.rowCount(), 6);
+
+ {
+ int row = -1;
+ QFormLayout::ItemRole role = QFormLayout::ItemRole(-123);
+ layout.getLayoutPosition(&l1, &row, &role);
+ QCOMPARE(row, 5);
+ QCOMPARE(int(role), int(QFormLayout::LabelRole));
+ }
+
+ {
+ int row = -1;
+ QFormLayout::ItemRole role = QFormLayout::ItemRole(-123);
+ layout.getLayoutPosition(&l2, &row, &role);
+ QCOMPARE(row, 3);
+ QCOMPARE(int(role), int(QFormLayout::FieldRole));
+ }
+
+ {
+ int row = -1;
+ QFormLayout::ItemRole role = QFormLayout::ItemRole(-123);
+ layout.getLayoutPosition(&l3, &row, &role);
+ QCOMPARE(row, 3);
+ QCOMPARE(int(role), int(QFormLayout::LabelRole));
+ }
+
+ {
+ int row = -1;
+ QFormLayout::ItemRole role = QFormLayout::ItemRole(-123);
+ layout.getLayoutPosition(&l4, &row, &role);
+ QCOMPARE(row, -1);
+ QCOMPARE(int(role), -123);
+ }
+
+ {
+ int row = -1;
+ QFormLayout::ItemRole role = QFormLayout::ItemRole(-123);
+ layout.getLayoutPosition(0, &row, &role);
+ QCOMPARE(row, -1);
+ QCOMPARE(int(role), -123);
+ }
+}
+
+void tst_QFormLayout::itemAt()
+{
+ QFormLayout layout;
+
+ QWidget w1;
+ QWidget w2;
+ QWidget w3;
+ QWidget w4;
+ QWidget w5;
+ QHBoxLayout l6;
+
+ layout.setWidget(5, QFormLayout::LabelRole, &w1);
+ layout.setWidget(3, QFormLayout::FieldRole, &w2);
+ layout.setWidget(3, QFormLayout::LabelRole, &w3);
+ layout.addRow(&w4, &w5);
+ layout.addRow("Foo:", &l6);
+
+ QCOMPARE(layout.count(), 7);
+
+ QBitArray scoreBoard(7);
+ for (int i = 0; i < 7; ++i) {
+ QLayoutItem *item = layout.itemAt(i);
+ QVERIFY(item != 0);
+
+ if (item->widget() == &w1) {
+ scoreBoard[0] = true;
+ } else if (item->widget() == &w2) {
+ scoreBoard[1] = true;
+ } else if (item->widget() == &w3) {
+ scoreBoard[2] = true;
+ } else if (item->widget() == &w4) {
+ scoreBoard[3] = true;
+ } else if (item->widget() == &w5) {
+ scoreBoard[4] = true;
+ } else if (item->layout() == &l6) {
+ scoreBoard[5] = true;
+ } else if (qobject_cast<QLabel *>(item->widget())) {
+ scoreBoard[6] = true;
+ }
+ }
+ QCOMPARE(scoreBoard.count(false), 0);
+}
+
+void tst_QFormLayout::takeAt()
+{
+ QFormLayout layout;
+
+ QWidget w1;
+ QWidget w2;
+ QWidget w3;
+ QWidget w4;
+ QWidget w5;
+ QHBoxLayout l6;
+
+ layout.setWidget(5, QFormLayout::LabelRole, &w1);
+ layout.setWidget(3, QFormLayout::FieldRole, &w2);
+ layout.setWidget(3, QFormLayout::LabelRole, &w3);
+ layout.addRow(&w4, &w5);
+ layout.addRow("Foo:", &l6);
+
+ QCOMPARE(layout.count(), 7);
+
+ for (int i = 6; i >= 0; --i) {
+ layout.takeAt(0);
+ QCOMPARE(layout.count(), i);
+ }
+}
+
+void tst_QFormLayout::layoutAlone()
+{
+ QWidget w;
+ QFormLayout layout;
+ layout.setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);
+ w.setLayout(&layout);
+ QLabel label("Here is a strange test case");
+ layout.setWidget(0, QFormLayout::LabelRole, &label);
+ QHBoxLayout hlay;
+ layout.setLayout(1, QFormLayout::LabelRole, &hlay);
+ QCOMPARE(layout.count(), 2);
+ w.show();
+ layout.activate();
+ QTest::qWait(500);
+}
+
+QTEST_MAIN(tst_QFormLayout)
+
+#include "tst_qformlayout.moc"