diff options
author | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2018-03-08 09:27:37 +0100 |
---|---|---|
committer | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2018-03-08 09:27:38 +0100 |
commit | 332ce6734d29fb03852d04de6bc648289ff1c35d (patch) | |
tree | 30713dba37e3a98c7606c18f044ab4a815863288 /tests | |
parent | 2056bc6bc51efa1da61098ba3d213a4e25d9e7d8 (diff) | |
parent | caa5a20479bd58fda4380181691f772a1f3c1da4 (diff) |
Merge remote-tracking branch 'origin/5.11' into dev
Change-Id: Idf471ca5c6cf211813466b539ce45bdc1ae9b97c
Diffstat (limited to 'tests')
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()); } } |