summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2018-03-08 09:27:37 +0100
committerQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2018-03-08 09:27:38 +0100
commit332ce6734d29fb03852d04de6bc648289ff1c35d (patch)
tree30713dba37e3a98c7606c18f044ab4a815863288 /tests
parent2056bc6bc51efa1da61098ba3d213a4e25d9e7d8 (diff)
parentcaa5a20479bd58fda4380181691f772a1f3c1da4 (diff)
Merge remote-tracking branch 'origin/5.11' into dev
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp13
-rw-r--r--tests/auto/gui/kernel/qwindow/BLACKLIST2
-rw-r--r--tests/auto/other/other.pro2
-rw-r--r--tests/auto/other/qobjectperformance/.gitignore1
-rw-r--r--tests/auto/other/qobjectperformance/qobjectperformance.pro7
-rw-r--r--tests/auto/other/qobjectperformance/tst_qobjectperformance.cpp110
-rw-r--r--tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp42
-rw-r--r--tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp53
-rw-r--r--tests/auto/widgets/widgets/qtabwidget/tst_qtabwidget.cpp29
-rw-r--r--tests/benchmarks/corelib/kernel/qobject/main.cpp27
10 files changed, 164 insertions, 122 deletions
diff --git a/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp b/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp
index d393ac70da..1ecfdb5e47 100644
--- a/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp
+++ b/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp
@@ -132,7 +132,7 @@ private slots:
void taskQTBUG_45114_setItemData();
private:
- QAbstractItemModel *m_model;
+ QStandardItemModel *m_model;
QPersistentModelIndex persistent;
QVector<QModelIndex> rcParent;
QVector<int> rcFirst;
@@ -292,6 +292,12 @@ void tst_QStandardItemModel::insertRows()
// check header data has moved
QCOMPARE(m_model->headerData(3, Qt::Vertical).toString(), headerLabel);
+
+ // do not assert on empty list
+ QStandardItem *si = m_model->invisibleRootItem();
+ si->insertRow(0, QList<QStandardItem*>());
+ si->insertRows(0, 0);
+ si->insertRows(0, QList<QStandardItem*>());
}
void tst_QStandardItemModel::insertRowsItems()
@@ -402,6 +408,11 @@ void tst_QStandardItemModel::insertColumns()
// check header data has moved
QCOMPARE(m_model->headerData(3, Qt::Horizontal).toString(), headerLabel);
+
+ // do not assert on empty list
+ QStandardItem *si = m_model->invisibleRootItem();
+ si->insertColumn(0, QList<QStandardItem*>());
+ si->insertColumns(0, 0);
}
void tst_QStandardItemModel::removeRows()
diff --git a/tests/auto/gui/kernel/qwindow/BLACKLIST b/tests/auto/gui/kernel/qwindow/BLACKLIST
index 5c20e5fd43..734e928f7d 100644
--- a/tests/auto/gui/kernel/qwindow/BLACKLIST
+++ b/tests/auto/gui/kernel/qwindow/BLACKLIST
@@ -7,6 +7,8 @@ osx-10.12 ci
ubuntu-16.04
[modalWithChildWindow]
ubuntu-16.04
+# QTBUG-66851
+opensuse
[setVisible]
[modalWindowEnterEventOnHide_QTBUG35109]
ubuntu-16.04
diff --git a/tests/auto/other/other.pro b/tests/auto/other/other.pro
index 4119a40279..ea2e1dabf2 100644
--- a/tests/auto/other/other.pro
+++ b/tests/auto/other/other.pro
@@ -16,7 +16,6 @@ SUBDIRS=\
qcomplextext \
qfocusevent \
qnetworkaccessmanager_and_qprogressdialog \
- qobjectperformance \
qobjectrace \
qsharedpointer_and_qwidget \
qprocess_and_guieventloop \
@@ -44,7 +43,6 @@ SUBDIRS=\
lancelot \
networkselftest \
qnetworkaccessmanager_and_qprogressdialog \
- qobjectperformance
cross_compile: SUBDIRS -= \
atwrapper \
diff --git a/tests/auto/other/qobjectperformance/.gitignore b/tests/auto/other/qobjectperformance/.gitignore
deleted file mode 100644
index 028ca89aad..0000000000
--- a/tests/auto/other/qobjectperformance/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-tst_qobjectperformance
diff --git a/tests/auto/other/qobjectperformance/qobjectperformance.pro b/tests/auto/other/qobjectperformance/qobjectperformance.pro
deleted file mode 100644
index 189f8eeb2a..0000000000
--- a/tests/auto/other/qobjectperformance/qobjectperformance.pro
+++ /dev/null
@@ -1,7 +0,0 @@
-CONFIG += testcase
-TARGET = tst_qobjectperformance
-SOURCES += tst_qobjectperformance.cpp
-
-QT = core network testlib
-
-
diff --git a/tests/auto/other/qobjectperformance/tst_qobjectperformance.cpp b/tests/auto/other/qobjectperformance/tst_qobjectperformance.cpp
deleted file mode 100644
index cbff6b7caf..0000000000
--- a/tests/auto/other/qobjectperformance/tst_qobjectperformance.cpp
+++ /dev/null
@@ -1,110 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-#include <QtTest/QtTest>
-
-#include <qcoreapplication.h>
-
-#include <qobject.h>
-
-class tst_QObjectPerformance : public QObject
-{
- Q_OBJECT
-
-public:
-
-private slots:
- void emitToManyReceivers();
-};
-
-class SimpleSenderObject : public QObject
-{
- Q_OBJECT
-
-signals:
- void signal();
-
-public:
- void emitSignal()
- {
- emit signal();
- }
-};
-
-class SimpleReceiverObject : public QObject
-{
- Q_OBJECT
-
-public slots:
- void slot()
- {
- }
-};
-
-void tst_QObjectPerformance::emitToManyReceivers()
-{
- // ensure that emission times remain mostly linear as the number of receivers increase
-
- SimpleSenderObject sender;
- int elapsed = 0;
- const int increase = 3000;
- const int base = 5000;
-
- for (int i = 0; i < 4; ++i) {
- const int size = base + i * increase;
- const double increaseRatio = double(size) / (double)(size - increase);
-
- QList<SimpleReceiverObject *> receivers;
- for (int k = 0; k < size; ++k) {
- SimpleReceiverObject *receiver = new SimpleReceiverObject;
- QObject::connect(&sender, SIGNAL(signal()), receiver, SLOT(slot()));
- receivers.append(receiver);
- }
-
- QTime timer;
- timer.start();
- sender.emitSignal();
- int e = timer.elapsed();
-
- if (elapsed > 1) {
- qDebug() << size << "receivers, elapsed time" << e << "compared to previous time" << elapsed;
- QVERIFY(double(e) / double(elapsed) <= increaseRatio * 2.0);
- } else {
- qDebug() << size << "receivers, elapsed time" << e << "cannot be compared to previous, unmeasurable time";
- }
- elapsed = e;
-
- qDeleteAll(receivers);
- receivers.clear();
- }
-}
-
-
-QTEST_MAIN(tst_QObjectPerformance)
-#include "tst_qobjectperformance.moc"
diff --git a/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp b/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp
index 427bc092a5..89978319a0 100644
--- a/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp
+++ b/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp
@@ -126,6 +126,8 @@ private slots:
void formatValueTrimStrings();
void precisionPolicy_data() { generic_data(); }
void precisionPolicy();
+ void infinityAndNan_data() { generic_data(); }
+ void infinityAndNan();
void multipleThreads_data() { generic_data(); }
void multipleThreads();
@@ -1467,6 +1469,46 @@ void tst_QSqlDatabase::precisionPolicy()
db.setNumericalPrecisionPolicy(oldPrecision);
}
+void tst_QSqlDatabase::infinityAndNan()
+{
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+
+ if (tst_Databases::getDatabaseType(db) != QSqlDriver::PostgreSQL)
+ QSKIP("checking for infinity/nan currently only works for PostgreSQL");
+
+ QSqlQuery q(db);
+ const QString tableName(qTableName("infititytest", __FILE__, db));
+ tst_Databases::safeDropTables(db, {tableName});
+ QVERIFY_SQL(q, exec(QString("CREATE TABLE %1 (id smallint, val double precision)").arg(tableName)));
+
+ QVERIFY_SQL(q, prepare(QString("INSERT INTO %1 VALUES (?, ?)").arg(tableName)));
+
+ q.bindValue(0, 1);
+ q.bindValue(1, qQNaN());
+ QVERIFY_SQL(q, exec());
+ q.bindValue(0, 2);
+ q.bindValue(1, qInf());
+ QVERIFY_SQL(q, exec());
+ q.bindValue(0, 3);
+ q.bindValue(1, -qInf());
+ QVERIFY_SQL(q, exec());
+
+ QVERIFY_SQL(q, exec(QString("SELECT val FROM %1 ORDER BY id").arg(tableName)));
+
+ QVERIFY_SQL(q, next());
+ QVERIFY(qIsNaN(q.value(0).toDouble()));
+
+ QVERIFY_SQL(q, next());
+ QVERIFY(qIsInf(q.value(0).toDouble()));
+ QVERIFY(q.value(0).toDouble() > 0);
+
+ QVERIFY_SQL(q, next());
+ QVERIFY(qIsInf(q.value(0).toDouble()));
+ QVERIFY(q.value(0).toDouble() < 0);
+}
+
// This test needs a ODBC data source containing MYSQL in it's name
void tst_QSqlDatabase::mysqlOdbc_unsignedIntegers()
{
diff --git a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp
index 5293ba487a..347d2a81e6 100644
--- a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp
+++ b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp
@@ -162,6 +162,7 @@ private slots:
void renderToPixmap();
void styleOptionViewItem();
void keyboardNavigationWithDisabled();
+ void saveRestoreState();
void statusTip_data();
void statusTip();
@@ -4076,6 +4077,58 @@ void tst_QTreeView::keyboardNavigationWithDisabled()
QCOMPARE(view.currentIndex(), model.index(6, 0));
}
+class RemoveColumnOne : public QSortFilterProxyModel
+{
+public:
+ bool filterAcceptsColumn(int source_column, const QModelIndex &) const override
+ {
+ if (m_removeColumn)
+ return source_column != 1;
+ return true;
+ }
+ void removeColumn()
+ {
+ m_removeColumn = true;
+ invalidate();
+ }
+private:
+ bool m_removeColumn = false;
+};
+
+
+void tst_QTreeView::saveRestoreState()
+{
+ QStandardItemModel model;
+ for (int i = 0; i < 100; i++) {
+ QList<QStandardItem *> items;
+ items << new QStandardItem(QLatin1String("item ") + QString::number(i)) << new QStandardItem(QStringLiteral("hidden by proxy")) << new QStandardItem(QStringLiteral("hidden by user"));
+ model.appendRow(items);
+ }
+ QCOMPARE(model.columnCount(), 3);
+
+ RemoveColumnOne proxy;
+ proxy.setSourceModel(&model);
+ QCOMPARE(proxy.columnCount(), 3);
+
+ QTreeView view;
+ view.setModel(&proxy);
+ view.resize(500, 500);
+ view.show();
+ view.header()->hideSection(2);
+ QVERIFY(view.header()->isSectionHidden(2));
+ proxy.removeColumn();
+ QCOMPARE(proxy.columnCount(), 2);
+ QVERIFY(view.header()->isSectionHidden(1));
+ const QByteArray data = view.header()->saveState();
+
+ QTreeView view2;
+ view2.setModel(&proxy);
+ view2.resize(500, 500);
+ view2.show();
+ view2.header()->restoreState(data);
+ QVERIFY(view2.header()->isSectionHidden(1));
+}
+
class Model_11466 : public QAbstractItemModel
{
Q_OBJECT
diff --git a/tests/auto/widgets/widgets/qtabwidget/tst_qtabwidget.cpp b/tests/auto/widgets/widgets/qtabwidget/tst_qtabwidget.cpp
index 2a2331c3bf..b5ffb90e42 100644
--- a/tests/auto/widgets/widgets/qtabwidget/tst_qtabwidget.cpp
+++ b/tests/auto/widgets/widgets/qtabwidget/tst_qtabwidget.cpp
@@ -98,6 +98,7 @@ private slots:
void heightForWidth();
void tabBarClicked();
void moveCurrentTab();
+ void autoHide();
private:
int addPage();
@@ -713,5 +714,33 @@ void tst_QTabWidget::moveCurrentTab()
QCOMPARE(tabWidget.currentWidget(), secondTab);
}
+void tst_QTabWidget::autoHide()
+{
+ QTabWidget tabWidget;
+ QWidget* firstTab = new QWidget(&tabWidget);
+ tabWidget.addTab(firstTab, "0");
+ const auto sizeHint1 = tabWidget.sizeHint();
+ const auto minSizeHint1 = tabWidget.minimumSizeHint();
+ const auto heightForWidth1 = tabWidget.heightForWidth(20);
+
+ QWidget* secondTab = new QWidget(&tabWidget);
+ tabWidget.addTab(secondTab, "1");
+ const auto sizeHint2 = tabWidget.sizeHint();
+ const auto minSizeHint2 = tabWidget.minimumSizeHint();
+ const auto heightForWidth2 = tabWidget.heightForWidth(20);
+
+ tabWidget.setTabBarAutoHide(true);
+ // size should not change
+ QCOMPARE(sizeHint2, tabWidget.sizeHint());
+ QCOMPARE(minSizeHint2, tabWidget.minimumSizeHint());
+ QCOMPARE(heightForWidth2, tabWidget.heightForWidth(20));
+
+ tabWidget.removeTab(1);
+ // this size should change now since the tab should be hidden
+ QVERIFY(sizeHint1.height() > tabWidget.sizeHint().height());
+ QVERIFY(minSizeHint1.height() > tabWidget.sizeHint().height());
+ QVERIFY(heightForWidth1 > tabWidget.heightForWidth(20));
+}
+
QTEST_MAIN(tst_QTabWidget)
#include "tst_qtabwidget.moc"
diff --git a/tests/benchmarks/corelib/kernel/qobject/main.cpp b/tests/benchmarks/corelib/kernel/qobject/main.cpp
index 13c1439e43..04ca69ad3b 100644
--- a/tests/benchmarks/corelib/kernel/qobject/main.cpp
+++ b/tests/benchmarks/corelib/kernel/qobject/main.cpp
@@ -43,6 +43,8 @@ Q_OBJECT
private slots:
void signal_slot_benchmark();
void signal_slot_benchmark_data();
+ void signal_many_receivers();
+ void signal_many_receivers_data();
void qproperty_benchmark_data();
void qproperty_benchmark();
void dynamic_property_benchmark();
@@ -127,13 +129,36 @@ void QObjectBenchmark::signal_slot_benchmark()
}
}
+void QObjectBenchmark::signal_many_receivers_data()
+{
+ QTest::addColumn<int>("receiverCount");
+ QTest::newRow("100 receivers") << 100;
+ QTest::newRow("1 000 receivers") << 1000;
+ QTest::newRow("10 000 receivers") << 10000;
+}
+
+void QObjectBenchmark::signal_many_receivers()
+{
+ QFETCH(int, receiverCount);
+ Object sender;
+ std::vector<Object> receivers(receiverCount);
+
+ for (Object &receiver : receivers)
+ QObject::connect(&sender, &Object::signal0, &receiver, &Object::slot0);
+
+ QBENCHMARK {
+ sender.emitSignal0();
+ }
+}
+
void QObjectBenchmark::qproperty_benchmark_data()
{
QTest::addColumn<QByteArray>("name");
const QMetaObject *mo = &QTreeView::staticMetaObject;
for (int i = 0; i < mo->propertyCount(); ++i) {
QMetaProperty prop = mo->property(i);
- QTest::newRow(prop.name()) << QByteArray(prop.name());
+ if (prop.isWritable())
+ QTest::newRow(prop.name()) << QByteArray(prop.name());
}
}