summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@theqtcompany.com>2015-07-17 15:06:22 +0200
committerSimon Hausmann <simon.hausmann@theqtcompany.com>2015-07-17 16:35:42 +0200
commitb2603b76655ac819e43c063bb6f16bc95f358083 (patch)
tree0fbe2c367ebfffdb70e9e3f21a7cf408bafd9626 /tests
parent99b94aadf875c822afb6c2580e43355ac392ac92 (diff)
parent756266d01560157b7274e466b9ffc1b0e2ef9a1f (diff)
Merge remote-tracking branch 'origin/5.5' into HEAD
Conflicts: src/plugins/platforms/windows/qwindowsopengltester.cpp Change-Id: Ia7abeba9395ccf84e2fa81b91a5725a86dedb9fe
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/corelib/global/qglobalstatic/tst_qglobalstatic.cpp4
-rw-r--r--tests/auto/corelib/io/qdir/tst_qdir.cpp15
-rw-r--r--tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp2
-rw-r--r--tests/auto/corelib/io/qtemporaryfile/tst_qtemporaryfile.cpp1
-rw-r--r--tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp59
-rw-r--r--tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp16
-rw-r--r--tests/auto/gui/kernel/qtouchevent/tst_qtouchevent.cpp13
-rw-r--r--tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp55
-rw-r--r--tests/auto/widgets/kernel/qaction/tst_qaction.cpp38
-rw-r--r--tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp8
10 files changed, 161 insertions, 50 deletions
diff --git a/tests/auto/corelib/global/qglobalstatic/tst_qglobalstatic.cpp b/tests/auto/corelib/global/qglobalstatic/tst_qglobalstatic.cpp
index 68129f9081..e9fd999e9f 100644
--- a/tests/auto/corelib/global/qglobalstatic/tst_qglobalstatic.cpp
+++ b/tests/auto/corelib/global/qglobalstatic/tst_qglobalstatic.cpp
@@ -57,7 +57,7 @@ private Q_SLOTS:
void api();
void constVolatile();
void exception();
- void threadedException();
+ void catchExceptionAndRetry();
void threadStressTest();
void afterDestruction();
};
@@ -163,7 +163,7 @@ void tst_QGlobalStatic::exception()
QBasicAtomicInt exceptionControlVar = Q_BASIC_ATOMIC_INITIALIZER(1);
Q_GLOBAL_STATIC_WITH_ARGS(ThrowingType, exceptionGS, (exceptionControlVar))
-void tst_QGlobalStatic::threadedException()
+void tst_QGlobalStatic::catchExceptionAndRetry()
{
if (exceptionControlVar.load() != 1)
QSKIP("This test cannot be run more than once");
diff --git a/tests/auto/corelib/io/qdir/tst_qdir.cpp b/tests/auto/corelib/io/qdir/tst_qdir.cpp
index 45289df398..72d036c2ae 100644
--- a/tests/auto/corelib/io/qdir/tst_qdir.cpp
+++ b/tests/auto/corelib/io/qdir/tst_qdir.cpp
@@ -470,21 +470,22 @@ void tst_QDir::removeRecursivelyFailure()
#ifdef Q_OS_UNIX
QFile dirAsFile(path); // yay, I have to use QFile to change a dir's permissions...
QVERIFY(dirAsFile.setPermissions(QFile::Permissions(0))); // no permissions
-#else
- QVERIFY(file.setPermissions(QFile::ReadOwner));
-#endif
+
QVERIFY(!QDir().rmdir(path));
QDir dir(path);
QVERIFY(!dir.removeRecursively()); // didn't work
QVERIFY(dir.exists()); // still exists
-#ifdef Q_OS_UNIX
QVERIFY(dirAsFile.setPermissions(QFile::Permissions(QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner)));
-#else
- QVERIFY(file.setPermissions(QFile::ReadOwner | QFile::WriteOwner));
-#endif
QVERIFY(dir.removeRecursively());
QVERIFY(!dir.exists());
+#else // Q_OS_UNIX
+ QVERIFY(file.setPermissions(QFile::ReadOwner));
+ QVERIFY(!QDir().rmdir(path));
+ QDir dir(path);
+ QVERIFY(dir.removeRecursively());
+ QVERIFY(!dir.exists());
+#endif // !Q_OS_UNIX
}
void tst_QDir::removeRecursivelySymlink()
diff --git a/tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp b/tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp
index e144e32c77..3e98a369ce 100644
--- a/tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp
+++ b/tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp
@@ -215,6 +215,8 @@ void tst_QTemporaryDir::autoRemove()
QFile file(dirName + "/dir1/file");
QVERIFY(file.open(QIODevice::WriteOnly));
QCOMPARE(file.write("Hello"), 5LL);
+ file.close();
+ QVERIFY(file.setPermissions(QFile::ReadUser));
}
#ifdef Q_OS_WIN
QTRY_VERIFY(!QDir(dirName).exists());
diff --git a/tests/auto/corelib/io/qtemporaryfile/tst_qtemporaryfile.cpp b/tests/auto/corelib/io/qtemporaryfile/tst_qtemporaryfile.cpp
index e7325d2b8e..94e6bbaade 100644
--- a/tests/auto/corelib/io/qtemporaryfile/tst_qtemporaryfile.cpp
+++ b/tests/auto/corelib/io/qtemporaryfile/tst_qtemporaryfile.cpp
@@ -353,6 +353,7 @@ void tst_QTemporaryFile::removeAndReOpen()
QVERIFY(!QFile::exists(fileName));
QVERIFY(file.open());
+ QCOMPARE(QFileInfo(file.fileName()).path(), QFileInfo(fileName).path());
fileName = file.fileName();
QVERIFY(QFile::exists(fileName));
}
diff --git a/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp b/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp
index 9c856c9d0f..1dc358bd97 100644
--- a/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp
+++ b/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp
@@ -54,6 +54,8 @@ private slots:
void singleShotTimeout();
void timeout();
void remainingTime();
+ void remainingTimeDuringActivation_data();
+ void remainingTimeDuringActivation();
void livelock_data();
void livelock();
void timerInfiniteRecursion_data();
@@ -79,14 +81,16 @@ class TimerHelper : public QObject
{
Q_OBJECT
public:
- TimerHelper() : QObject(), count(0)
+ TimerHelper() : QObject(), count(0), remainingTime(-1)
{
}
int count;
+ int remainingTime;
public slots:
void timeout();
+ void fetchRemainingTime();
};
void TimerHelper::timeout()
@@ -94,6 +98,12 @@ void TimerHelper::timeout()
++count;
}
+void TimerHelper::fetchRemainingTime()
+{
+ QTimer *timer = static_cast<QTimer *>(sender());
+ remainingTime = timer->remainingTime();
+}
+
void tst_QTimer::zeroTimer()
{
TimerHelper helper;
@@ -158,6 +168,53 @@ void tst_QTimer::remainingTime()
int remainingTime = timer.remainingTime();
QVERIFY2(qAbs(remainingTime - 150) < 50, qPrintable(QString::number(remainingTime)));
+
+ // wait for the timer to actually fire now
+ connect(&timer, SIGNAL(timeout()), &QTestEventLoop::instance(), SLOT(exitLoop()));
+ QTestEventLoop::instance().enterLoop(5);
+ QVERIFY(!QTestEventLoop::instance().timeout());
+ QCOMPARE(helper.count, 1);
+
+ // the timer is still active, so it should have a non-zero remaining time
+ remainingTime = timer.remainingTime();
+ QVERIFY2(remainingTime > 150, qPrintable(QString::number(remainingTime)));
+}
+
+void tst_QTimer::remainingTimeDuringActivation_data()
+{
+ QTest::addColumn<bool>("singleShot");
+ QTest::newRow("repeating") << true;
+ QTest::newRow("single-shot") << true;
+}
+
+void tst_QTimer::remainingTimeDuringActivation()
+{
+ QFETCH(bool, singleShot);
+
+ TimerHelper helper;
+ QTimer timer;
+
+ const int timeout = 20; // 20 ms is short enough and should not round down to 0 in any timer mode
+
+ connect(&timer, SIGNAL(timeout()), &helper, SLOT(fetchRemainingTime()));
+ connect(&timer, SIGNAL(timeout()), &QTestEventLoop::instance(), SLOT(exitLoop()));
+ timer.start(timeout);
+ timer.setSingleShot(singleShot);
+
+ QTestEventLoop::instance().enterLoop(5);
+ QVERIFY(!QTestEventLoop::instance().timeout());
+ if (singleShot)
+ QCOMPARE(helper.remainingTime, -1); // timer not running
+ else
+ QCOMPARE(helper.remainingTime, timeout);
+
+ if (!singleShot) {
+ // do it again - see QTBUG-46940
+ helper.remainingTime = -1;
+ QTestEventLoop::instance().enterLoop(5);
+ QVERIFY(!QTestEventLoop::instance().timeout());
+ QCOMPARE(helper.remainingTime, timeout);
+ }
}
void tst_QTimer::livelock_data()
diff --git a/tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp b/tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp
index 719daad3b6..82f78b2b0b 100644
--- a/tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp
+++ b/tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp
@@ -56,6 +56,7 @@ private slots:
void indexOf();
void lastIndexOf();
void contains();
+ void clear();
void initializeListInt();
void initializeListMovable();
void initializeListComplex();
@@ -812,6 +813,21 @@ void tst_QVarLengthArray::contains()
QVERIFY(myvec.contains(QLatin1String("I don't exist")));
}
+void tst_QVarLengthArray::clear()
+{
+ QVarLengthArray<QString, 5> myvec;
+
+ for (int i = 0; i < 10; ++i)
+ myvec << "aaa";
+
+ QCOMPARE(myvec.size(), 10);
+ QVERIFY(myvec.capacity() >= myvec.size());
+ const int oldCapacity = myvec.capacity();
+ myvec.clear();
+ QCOMPARE(myvec.size(), 0);
+ QCOMPARE(myvec.capacity(), oldCapacity);
+}
+
void tst_QVarLengthArray::initializeListInt()
{
initializeList<int>();
diff --git a/tests/auto/gui/kernel/qtouchevent/tst_qtouchevent.cpp b/tests/auto/gui/kernel/qtouchevent/tst_qtouchevent.cpp
index aa1f573aa9..fd3cfd55ff 100644
--- a/tests/auto/gui/kernel/qtouchevent/tst_qtouchevent.cpp
+++ b/tests/auto/gui/kernel/qtouchevent/tst_qtouchevent.cpp
@@ -170,7 +170,10 @@ public:
}
QRectF boundingRect() const Q_DECL_OVERRIDE { return QRectF(0, 0, 10, 10); }
- void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *) Q_DECL_OVERRIDE { }
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) Q_DECL_OVERRIDE
+ {
+ painter->fillRect(QRectF(QPointF(0, 0), boundingRect().size()), Qt::yellow);
+ }
bool sceneEvent(QEvent *event) Q_DECL_OVERRIDE
{
@@ -1446,6 +1449,7 @@ void tst_QTouchEvent::touchBeginWithGraphicsWidget()
{
QGraphicsScene scene;
QGraphicsView view(&scene);
+ view.setWindowTitle(QTest::currentTestFunction());
QScopedPointer<tst_QTouchEventGraphicsItem> root(new tst_QTouchEventGraphicsItem);
root->setAcceptTouchEvents(true);
scene.addItem(root.data());
@@ -1454,10 +1458,13 @@ void tst_QTouchEvent::touchBeginWithGraphicsWidget()
glassWidget->setMinimumSize(100, 100);
scene.addItem(glassWidget.data());
- view.resize(200, 200);
+ view.setAlignment(Qt::AlignLeft | Qt::AlignTop);
+ const QRect availableGeometry = QGuiApplication::primaryScreen()->availableGeometry();
+ view.resize(availableGeometry.size() - QSize(100, 100));
+ view.move(availableGeometry.topLeft() + QPoint(50, 50));
+ view.fitInView(scene.sceneRect());
view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
- view.fitInView(scene.sceneRect());
QTest::touchEvent(&view, touchScreenDevice)
.press(0, view.mapFromScene(root->mapToScene(3,3)), view.viewport());
diff --git a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp
index b06a63365c..507a41f3c6 100644
--- a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp
+++ b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp
@@ -306,6 +306,7 @@ void tst_QListView::init()
void tst_QListView::cleanup()
{
+ QVERIFY(QApplication::topLevelWidgets().isEmpty());
}
@@ -791,14 +792,31 @@ void tst_QListView::hideFirstRow()
QTest::qWait(10);
}
+static int modelIndexCount(const QAbstractItemView *view)
+{
+ QBitArray ba;
+ for (int y = 0, height = view->height(); y < height; ++y) {
+ const QModelIndex idx = view->indexAt( QPoint(1, y) );
+ if (!idx.isValid())
+ break;
+ if (idx.row() >= ba.size())
+ ba.resize(idx.row() + 1);
+ ba.setBit(idx.row(), true);
+ }
+ return ba.size();
+}
+
void tst_QListView::batchedMode()
{
+ const int rowCount = 3;
+
QStringList items;
- for (int i=0; i <3; ++i)
- items << "item";
+ for (int i = 0; i < rowCount; ++i)
+ items << QLatin1String("item ") + QString::number(i);
QStringListModel model(items);
QListView view;
+ view.setWindowTitle(QTest::currentTestFunction());
view.setModel(&model);
view.setUniformItemSizes(true);
view.setViewMode(QListView::ListMode);
@@ -807,22 +825,8 @@ void tst_QListView::batchedMode()
view.resize(200,400);
view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
- QTest::qWait(100);
-
-#if defined(Q_OS_WINCE)
- QTest::qWait(2000);
-#endif
- QBitArray ba;
- for (int y = 0; y < view.height(); ++y) {
- QModelIndex idx = view.indexAt( QPoint(1, y) );
- if (!idx.isValid())
- break;
- if (idx.row() >= ba.size())
- ba.resize(idx.row() + 1);
- ba.setBit(idx.row(), true);
- }
- QCOMPARE(ba.size(), 3);
+ QTRY_COMPARE(modelIndexCount(&view), rowCount);
// Test the dynamic listview too.
view.setViewMode(QListView::IconMode);
@@ -830,22 +834,7 @@ void tst_QListView::batchedMode()
view.setFlow(QListView::TopToBottom);
view.setBatchSize(2);
-#if !defined(Q_OS_WINCE)
- QTest::qWait(100);
-#else
- QTest::qWait(2000);
-#endif
-
- ba.clear();
- for (int y = 0; y < view.height(); ++y) {
- QModelIndex idx = view.indexAt( QPoint(1, y) );
- if (!idx.isValid())
- break;
- if (idx.row() >= ba.size())
- ba.resize(idx.row() + 1);
- ba.setBit(idx.row(), true);
- }
- QCOMPARE(ba.size(), 3);
+ QTRY_COMPARE(modelIndexCount(&view), rowCount);
}
void tst_QListView::setCurrentIndex()
diff --git a/tests/auto/widgets/kernel/qaction/tst_qaction.cpp b/tests/auto/widgets/kernel/qaction/tst_qaction.cpp
index be1fed2be3..897128d40e 100644
--- a/tests/auto/widgets/kernel/qaction/tst_qaction.cpp
+++ b/tests/auto/widgets/kernel/qaction/tst_qaction.cpp
@@ -69,6 +69,7 @@ private slots:
void task200823_tooltip();
void task229128TriggeredSignalWithoutActiongroup();
void task229128TriggeredSignalWhenInActiongroup();
+ void repeat();
private:
int m_lastEventType;
@@ -380,5 +381,42 @@ void tst_QAction::task229128TriggeredSignalWhenInActiongroup()
QCOMPARE(actionSpy.count(), 1);
}
+void tst_QAction::repeat()
+{
+ QWidget *wid = m_tstWidget;
+ QAction act(wid);
+ wid->addAction(&act);
+ act.setShortcut(QKeySequence(Qt::Key_F));
+ QSignalSpy spy(&act, SIGNAL(triggered()));
+
+ act.setAutoRepeat(true);
+ QTest::keyPress(wid, Qt::Key_F);
+ QTest::keyRelease(wid, Qt::Key_F);
+ QCOMPARE(spy.count(), 1);
+
+ spy.clear();
+ QTest::keyPress(wid, Qt::Key_F);
+ // repeat event
+ QTest::simulateEvent(wid, true, Qt::Key_F, Qt::NoModifier, QString("f"), true);
+ QTest::simulateEvent(wid, true, Qt::Key_F, Qt::NoModifier, QString("f"), true);
+ QTest::keyRelease(wid, Qt::Key_F);
+ QCOMPARE(spy.count(), 3);
+
+ spy.clear();
+ act.setAutoRepeat(false);
+ QTest::keyPress(wid, Qt::Key_F);
+ QTest::simulateEvent(wid, true, Qt::Key_F, Qt::NoModifier, QString("f"), true);
+ QTest::simulateEvent(wid, true, Qt::Key_F, Qt::NoModifier, QString("f"), true);
+ QTest::keyRelease(wid, Qt::Key_F);
+ QCOMPARE(spy.count(), 1);
+
+ spy.clear();
+ act.setAutoRepeat(true);
+ QTest::keyPress(wid, Qt::Key_F);
+ QTest::simulateEvent(wid, true, Qt::Key_F, Qt::NoModifier, QString("f"), true);
+ QTest::keyRelease(wid, Qt::Key_F);
+ QCOMPARE(spy.count(), 2);
+}
+
QTEST_MAIN(tst_QAction)
#include "tst_qaction.moc"
diff --git a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp
index 15532bf4fd..84956d0a02 100644
--- a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp
+++ b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp
@@ -2088,11 +2088,12 @@ void tst_QApplication::touchEventPropagation()
window.resize(200, 200);
window.setObjectName("2. window");
TouchEventPropagationTestWidget widget(&window);
+ widget.resize(200, 200);
widget.setObjectName("2. widget");
window.show();
QVERIFY(QTest::qWaitForWindowExposed(&window));
- pressedTouchPoints[0].setScreenPos(window.mapToGlobal(QPoint(0, 0)));
- releasedTouchPoints[0].setScreenPos(window.mapToGlobal(QPoint(0, 0)));
+ pressedTouchPoints[0].setScreenPos(window.mapToGlobal(QPoint(50, 50)));
+ releasedTouchPoints[0].setScreenPos(window.mapToGlobal(QPoint(50, 50)));
QWindowSystemInterface::handleTouchEvent(window.windowHandle(),
0,
@@ -2102,9 +2103,8 @@ void tst_QApplication::touchEventPropagation()
0,
device,
touchPointList(releasedTouchPoints));
- QCoreApplication::processEvents();
+ QTRY_VERIFY(widget.seenMouseEvent);
QVERIFY(!widget.seenTouchEvent);
- QVERIFY(widget.seenMouseEvent);
QVERIFY(!window.seenTouchEvent);
QVERIFY(window.seenMouseEvent);