summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/corelib/kernel')
-rw-r--r--tests/auto/corelib/kernel/kernel.pro3
-rw-r--r--tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp2
-rw-r--r--tests/auto/corelib/kernel/qelapsedtimer/qelapsedtimer.pro5
-rw-r--r--tests/auto/corelib/kernel/qelapsedtimer/tst_qelapsedtimer.cpp139
-rw-r--r--tests/auto/corelib/kernel/qeventloop/qeventloop.pro2
-rw-r--r--tests/auto/corelib/kernel/qmetatype/qmetatype.pro4
-rw-r--r--tests/auto/corelib/kernel/qobject/signalbug/signalbug.pro3
-rw-r--r--tests/auto/corelib/kernel/qobject/tst_qobject.cpp27
-rw-r--r--tests/auto/corelib/kernel/qsharedmemory/test/tst_qsharedmemory.cpp7
-rw-r--r--tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp101
-rw-r--r--tests/auto/corelib/kernel/qvariant/stream/qt5.0/qdatetime.binbin40 -> 40 bytes
11 files changed, 271 insertions, 22 deletions
diff --git a/tests/auto/corelib/kernel/kernel.pro b/tests/auto/corelib/kernel/kernel.pro
index f85c39e9e6..431d483339 100644
--- a/tests/auto/corelib/kernel/kernel.pro
+++ b/tests/auto/corelib/kernel/kernel.pro
@@ -1,6 +1,7 @@
TEMPLATE=subdirs
SUBDIRS=\
qcoreapplication \
+ qelapsedtimer \
qeventdispatcher \
qeventloop \
qmath \
@@ -38,4 +39,4 @@ SUBDIRS=\
# This test is only applicable on Windows
!win32*|winrt: SUBDIRS -= qwineventnotifier
-android|ios: SUBDIRS -= qsharedmemory qsystemsemaphore
+android|uikit: SUBDIRS -= qsharedmemory qsystemsemaphore
diff --git a/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp b/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp
index a8de5b7a9a..0691297497 100644
--- a/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp
+++ b/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp
@@ -155,7 +155,7 @@ void tst_QCoreApplication::qAppName()
void tst_QCoreApplication::argc()
{
-#if defined(Q_OS_WINCE) || defined(Q_OS_WINRT)
+#if defined(Q_OS_WINRT)
QSKIP("QCoreApplication::arguments() parses arguments from actual command line on this platform.");
#endif
{
diff --git a/tests/auto/corelib/kernel/qelapsedtimer/qelapsedtimer.pro b/tests/auto/corelib/kernel/qelapsedtimer/qelapsedtimer.pro
new file mode 100644
index 0000000000..657a63a5d7
--- /dev/null
+++ b/tests/auto/corelib/kernel/qelapsedtimer/qelapsedtimer.pro
@@ -0,0 +1,5 @@
+CONFIG += testcase
+TARGET = tst_qelapsedtimer
+QT = core testlib
+SOURCES = tst_qelapsedtimer.cpp
+
diff --git a/tests/auto/corelib/kernel/qelapsedtimer/tst_qelapsedtimer.cpp b/tests/auto/corelib/kernel/qelapsedtimer/tst_qelapsedtimer.cpp
new file mode 100644
index 0000000000..9db001c37d
--- /dev/null
+++ b/tests/auto/corelib/kernel/qelapsedtimer/tst_qelapsedtimer.cpp
@@ -0,0 +1,139 @@
+/****************************************************************************
+**
+** 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 <QtCore/QString>
+#include <QtCore/QTime>
+#include <QtCore/QElapsedTimer>
+#include <QtTest/QtTest>
+
+static const int minResolution = 50; // the minimum resolution for the tests
+
+QDebug operator<<(QDebug s, const QElapsedTimer &t)
+{
+ s.nospace() << "(" << t.msecsSinceReference() << ")";
+ return s.space();
+}
+
+class tst_QElapsedTimer : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void statics();
+ void validity();
+ void basics();
+ void elapsed();
+};
+
+void tst_QElapsedTimer::statics()
+{
+ qDebug() << "Clock type is" << QElapsedTimer::clockType();
+ qDebug() << "Said clock is" << (QElapsedTimer::isMonotonic() ? "monotonic" : "not monotonic");
+ QElapsedTimer t;
+ t.start();
+ qDebug() << "Current time is" << t.msecsSinceReference();
+}
+
+void tst_QElapsedTimer::validity()
+{
+ QElapsedTimer t;
+
+ QVERIFY(!t.isValid()); // non-POD now, it should always start invalid
+
+ t.start();
+ QVERIFY(t.isValid());
+
+ t.invalidate();
+ QVERIFY(!t.isValid());
+}
+
+void tst_QElapsedTimer::basics()
+{
+ QElapsedTimer t1;
+ t1.start();
+
+ QVERIFY(t1.msecsSinceReference() != 0);
+
+ QCOMPARE(t1, t1);
+ QVERIFY(!(t1 != t1));
+ QVERIFY(!(t1 < t1));
+ QCOMPARE(t1.msecsTo(t1), qint64(0));
+ QCOMPARE(t1.secsTo(t1), qint64(0));
+
+ quint64 value1 = t1.msecsSinceReference();
+ qDebug() << "value1:" << value1 << "t1:" << t1;
+ qint64 nsecs = t1.nsecsElapsed();
+ qint64 elapsed = t1.restart();
+ QVERIFY(elapsed < minResolution);
+ QVERIFY(nsecs / 1000000 < minResolution);
+
+ quint64 value2 = t1.msecsSinceReference();
+ qDebug() << "value2:" << value2 << "t1:" << t1
+ << "elapsed:" << elapsed << "nsecs:" << nsecs;
+ // in theory, elapsed == value2 - value1
+
+ // However, since QElapsedTimer keeps internally the full resolution,
+ // we have here a rounding error due to integer division
+ QVERIFY(qAbs(elapsed - qint64(value2 - value1)) <= 1);
+}
+
+void tst_QElapsedTimer::elapsed()
+{
+ QElapsedTimer t1;
+ t1.start();
+
+ QTest::qSleep(4*minResolution);
+ QElapsedTimer t2;
+ t2.start();
+
+ QVERIFY(t1 != t2);
+ QVERIFY(!(t1 == t2));
+ QVERIFY(t1 < t2);
+ QVERIFY(t1.msecsTo(t2) > 0);
+
+ QVERIFY(t1.nsecsElapsed() > 0);
+ QVERIFY(t1.elapsed() > 0);
+ // the number of elapsed nanoseconds and milliseconds should match
+ QVERIFY(t1.nsecsElapsed() - t1.elapsed() * 1000000 < 1000000);
+ QVERIFY(t1.hasExpired(minResolution));
+ QVERIFY(!t1.hasExpired(8*minResolution));
+ QVERIFY(!t2.hasExpired(minResolution));
+
+ QVERIFY(!t1.hasExpired(-1));
+ QVERIFY(!t2.hasExpired(-1));
+
+ qint64 elapsed = t1.restart();
+ QVERIFY(elapsed > 3*minResolution);
+ QVERIFY(elapsed < 5*minResolution);
+ qint64 diff = t2.msecsTo(t1);
+ QVERIFY(diff < minResolution);
+}
+
+QTEST_MAIN(tst_QElapsedTimer);
+
+#include "tst_qelapsedtimer.moc"
diff --git a/tests/auto/corelib/kernel/qeventloop/qeventloop.pro b/tests/auto/corelib/kernel/qeventloop/qeventloop.pro
index 5cd043b584..50072dc612 100644
--- a/tests/auto/corelib/kernel/qeventloop/qeventloop.pro
+++ b/tests/auto/corelib/kernel/qeventloop/qeventloop.pro
@@ -3,6 +3,6 @@ TARGET = tst_qeventloop
QT = core network testlib core-private
SOURCES = $$PWD/tst_qeventloop.cpp
-win32:!wince:!winrt: LIBS += -luser32
+win32:!winrt: LIBS += -luser32
contains(QT_CONFIG, glib): DEFINES += HAVE_GLIB
diff --git a/tests/auto/corelib/kernel/qmetatype/qmetatype.pro b/tests/auto/corelib/kernel/qmetatype/qmetatype.pro
index 1d4e647a4b..b5f1d0fe00 100644
--- a/tests/auto/corelib/kernel/qmetatype/qmetatype.pro
+++ b/tests/auto/corelib/kernel/qmetatype/qmetatype.pro
@@ -6,11 +6,11 @@ SOURCES = tst_qmetatype.cpp
TESTDATA=./typeFlags.bin
DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
-win32-msvc*|wince|winrt {
+win32-msvc*|winrt {
# Prevents "fatal error C1128: number of sections exceeded object file format limit".
QMAKE_CXXFLAGS += /bigobj
# Reduce compile time
- win32-msvc2012|wince|winrt {
+ win32-msvc2012|winrt {
QMAKE_CXXFLAGS_RELEASE -= -O2
QMAKE_CFLAGS_RELEASE -= -O2
}
diff --git a/tests/auto/corelib/kernel/qobject/signalbug/signalbug.pro b/tests/auto/corelib/kernel/qobject/signalbug/signalbug.pro
index 125915047a..cc51b4c661 100644
--- a/tests/auto/corelib/kernel/qobject/signalbug/signalbug.pro
+++ b/tests/auto/corelib/kernel/qobject/signalbug/signalbug.pro
@@ -2,9 +2,6 @@ CONFIG -= app_bundle debug_and_release
CONFIG += console
DESTDIR = ./
QT = core
-wince {
- LIBS += coredll.lib
-}
HEADERS += signalbug.h
SOURCES += signalbug.cpp
diff --git a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp
index b605b89f34..9ee9c1f331 100644
--- a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp
+++ b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp
@@ -66,6 +66,7 @@ private slots:
void connectDisconnectNotify();
void connectDisconnectNotifyPMF();
void disconnectNotify_receiverDestroyed();
+ void disconnectNotify_metaObjConnection();
void connectNotify_connectSlotsByName();
void connectDisconnectNotify_shadowing();
void emitInDefinedOrder();
@@ -923,8 +924,7 @@ void tst_QObject::connectDisconnectNotifyPMF()
// Test disconnectNotify when disconnecting by QMetaObject::Connection
QVERIFY(QObject::disconnect(conn));
- // disconnectNotify() is not called, but it probably should be.
- QVERIFY(s->disconnectedSignals.isEmpty());
+ QVERIFY(!s->disconnectedSignals.isEmpty());
// Test connectNotify when connecting by function pointer
s->clearNotifications();
@@ -969,6 +969,25 @@ void tst_QObject::disconnectNotify_receiverDestroyed()
delete s;
}
+void tst_QObject::disconnectNotify_metaObjConnection()
+{
+ NotifyObject *s = new NotifyObject;
+ NotifyObject *r = new NotifyObject;
+
+ QMetaObject::Connection c = QObject::connect((SenderObject*)s, SIGNAL(signal1()),
+ (ReceiverObject*)r, SLOT(slot1()));
+ QVERIFY(c);
+ QVERIFY(QObject::disconnect(c));
+
+ QCOMPARE(s->disconnectedSignals.count(), 1);
+ QCOMPARE(s->disconnectedSignals.at(0), QMetaMethod::fromSignal(&SenderObject::signal1));
+
+ delete r;
+ QCOMPARE(s->disconnectedSignals.count(), 1);
+
+ delete s;
+}
+
class ConnectByNameNotifySenderObject : public QObject
{
Q_OBJECT
@@ -1575,11 +1594,7 @@ Q_DECLARE_METATYPE(PropertyObject::Priority)
void tst_QObject::threadSignalEmissionCrash()
{
-#if defined(Q_OS_WINCE)
- int loopCount = 100;
-#else
int loopCount = 1000;
-#endif
for (int i = 0; i < loopCount; ++i) {
QTcpSocket socket;
socket.connectToHost("localhost", 80);
diff --git a/tests/auto/corelib/kernel/qsharedmemory/test/tst_qsharedmemory.cpp b/tests/auto/corelib/kernel/qsharedmemory/test/tst_qsharedmemory.cpp
index b6f6d2a7f3..26caff4301 100644
--- a/tests/auto/corelib/kernel/qsharedmemory/test/tst_qsharedmemory.cpp
+++ b/tests/auto/corelib/kernel/qsharedmemory/test/tst_qsharedmemory.cpp
@@ -90,7 +90,7 @@ private slots:
// extreme cases
void useTooMuchMemory();
-#if !defined(Q_OS_HPUX) && !defined(Q_OS_WINCE)
+#if !defined(Q_OS_HPUX)
void attachTooMuch();
#endif
@@ -516,8 +516,7 @@ void tst_QSharedMemory::useTooMuchMemory()
attach before the system runs out of resources.
*/
// HPUX doesn't allow for multiple attaches per process.
-// For WinCE, this test nearly kills the system, so skip it.
-#if !defined(Q_OS_HPUX) && !defined(Q_OS_WINCE)
+#if !defined(Q_OS_HPUX)
void tst_QSharedMemory::attachTooMuch()
{
QSKIP("disabled");
@@ -576,9 +575,7 @@ void tst_QSharedMemory::simpleProducerConsumer()
char *get = (char*)consumer.data();
// On Windows CE you always have ReadWrite access. Thus
// ViewMapOfFile returns the same pointer
-#if !defined(Q_OS_WINCE)
QVERIFY(put != get);
-#endif
for (int i = 0; i < size; ++i) {
put[i] = 'Q';
QCOMPARE(get[i], 'Q');
diff --git a/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp b/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp
index 6fd192c357..28df01cc16 100644
--- a/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp
+++ b/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp
@@ -52,6 +52,7 @@ private slots:
void remainingTime();
void remainingTimeDuringActivation_data();
void remainingTimeDuringActivation();
+ void basic_chrono();
void livelock_data();
void livelock();
void timerInfiniteRecursion_data();
@@ -68,6 +69,7 @@ private slots:
void singleShotStaticFunctionZeroTimeout();
void recurseOnTimeoutAndStopTimer();
void singleShotToFunctors();
+ void singleShot_chrono();
void crossThreadSingleShotToFunctor();
void dontBlockEvents();
@@ -214,6 +216,57 @@ void tst_QTimer::remainingTimeDuringActivation()
}
}
+void tst_QTimer::basic_chrono()
+{
+#if !QT_HAS_INCLUDE(<chrono>)
+ QSKIP("This test requires C++11 <chrono> support");
+#else
+ // duplicates zeroTimer, singleShotTimeout, interval and remainingTime
+ using namespace std::chrono;
+ TimerHelper helper;
+ QTimer timer;
+ timer.setInterval(nanoseconds(0));
+ timer.start();
+ QCOMPARE(timer.intervalAsDuration().count(), milliseconds::rep(0));
+ QCOMPARE(timer.remainingTimeAsDuration().count(), milliseconds::rep(0));
+
+ connect(&timer, SIGNAL(timeout()), &helper, SLOT(timeout()));
+
+ QCoreApplication::processEvents();
+
+ QCOMPARE(helper.count, 1);
+
+ helper.count = 0;
+ timer.start(milliseconds(100));
+ QCOMPARE(helper.count, 0);
+
+ QTest::qWait(TIMEOUT_TIMEOUT);
+ QVERIFY(helper.count > 0);
+ int oldCount = helper.count;
+
+ QTest::qWait(TIMEOUT_TIMEOUT);
+ QVERIFY(helper.count > oldCount);
+
+ helper.count = 0;
+ timer.start(microseconds(200000));
+ QCOMPARE(timer.intervalAsDuration().count(), milliseconds::rep(200));
+ QTest::qWait(50);
+ QCOMPARE(helper.count, 0);
+
+ milliseconds rt = timer.remainingTimeAsDuration();
+ QVERIFY2(qAbs(rt.count() - 150) < 50, qPrintable(QString::number(rt.count())));
+
+ helper.count = 0;
+ timer.setSingleShot(true);
+ timer.start(milliseconds(100));
+ QTest::qWait(500);
+ QCOMPARE(helper.count, 1);
+ QTest::qWait(500);
+ QCOMPARE(helper.count, 1);
+ helper.count = 0;
+#endif
+}
+
void tst_QTimer::livelock_data()
{
QTest::addColumn<int>("interval");
@@ -295,9 +348,6 @@ void tst_QTimer::livelock()
QTRY_COMPARE(tester.timeoutsForFirst, 1);
QCOMPARE(tester.timeoutsForExtra, 0);
QTRY_COMPARE(tester.timeoutsForSecond, 1);
-#if defined(Q_OS_WINCE)
- QEXPECT_FAIL("non-zero timer", "Windows CE devices often too slow", Continue);
-#endif
QVERIFY(tester.postEventAtRightTime);
}
@@ -790,6 +840,51 @@ void tst_QTimer::singleShotToFunctors()
_t = Q_NULLPTR;
}
+void tst_QTimer::singleShot_chrono()
+{
+#if !QT_HAS_INCLUDE(<chrono>)
+ QSKIP("This test requires C++11 <chrono> support");
+#else
+ // duplicates singleShotStaticFunctionZeroTimeout and singleShotToFunctors
+ using namespace std::chrono;
+ TimerHelper helper;
+
+ QTimer::singleShot(hours(0), &helper, SLOT(timeout()));
+ QTest::qWait(500);
+ QCOMPARE(helper.count, 1);
+ QTest::qWait(500);
+ QCOMPARE(helper.count, 1);
+
+ TimerHelper nhelper;
+
+ QTimer::singleShot(seconds(0), &nhelper, &TimerHelper::timeout);
+ QCoreApplication::processEvents();
+ QCOMPARE(nhelper.count, 1);
+ QCoreApplication::processEvents();
+ QCOMPARE(nhelper.count, 1);
+
+ int count = 0;
+ QTimer::singleShot(microseconds(0), CountedStruct(&count));
+ QCoreApplication::processEvents();
+ QCOMPARE(count, 1);
+
+ _e.reset(new QEventLoop);
+ QTimer::singleShot(0, &StaticEventLoop::quitEventLoop);
+ QCOMPARE(_e->exec(), 0);
+
+ QObject c3;
+ QTimer::singleShot(milliseconds(500), &c3, CountedStruct(&count));
+ QTest::qWait(800);
+ QCOMPARE(count, 2);
+
+ QTimer::singleShot(0, [&count] { ++count; });
+ QCoreApplication::processEvents();
+ QCOMPARE(count, 3);
+
+ _e.reset();
+#endif
+}
+
class DontBlockEvents : public QObject
{
Q_OBJECT
diff --git a/tests/auto/corelib/kernel/qvariant/stream/qt5.0/qdatetime.bin b/tests/auto/corelib/kernel/qvariant/stream/qt5.0/qdatetime.bin
index ee3da63a18..e3a897c37d 100644
--- a/tests/auto/corelib/kernel/qvariant/stream/qt5.0/qdatetime.bin
+++ b/tests/auto/corelib/kernel/qvariant/stream/qt5.0/qdatetime.bin
Binary files differ