testlib: Defer signal dumper start until tests are ready to run

We don't want the signal dumper to pick up signals that our own
test machinery produces, such as the ones emitted from the watchdog
thread startup and shutdown. This would otherwise produce:

 tst_Signaldumper::initTestCase() Signal: QThread(7fc969e0d870) started ()

At startup, and at shutdown even more confusingly:

 tst_Signaldumper::UnknownTestFunc() Signal: QThread(7fc969e0d870) finished ()

Change-Id: I9e81fa168eaa92551d38d5576973bbf95ac23364
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
This commit is contained in:
Tor Arne Vestbø 2020-07-21 22:38:47 +02:00
parent 304ec18a1a
commit e7371c19d9
9 changed files with 21 additions and 29 deletions

View File

@ -170,8 +170,16 @@ static void qSignalDumperCallbackEndSignal(QObject *caller, int /*signal_index*/
} }
void QSignalDumper::setEnabled(bool enabled)
{
s_isEnabled = enabled;
}
void QSignalDumper::startDump() void QSignalDumper::startDump()
{ {
if (!s_isEnabled)
return;
static QSignalSpyCallbackSet set = { QTest::qSignalDumperCallback, static QSignalSpyCallbackSet set = { QTest::qSignalDumperCallback,
QTest::qSignalDumperCallbackSlot, QTest::qSignalDumperCallbackEndSignal, nullptr }; QTest::qSignalDumperCallbackSlot, QTest::qSignalDumperCallbackEndSignal, nullptr };
qt_register_signal_spy_callbacks(&set); qt_register_signal_spy_callbacks(&set);
@ -194,4 +202,6 @@ void QSignalDumper::clearIgnoredClasses()
QTest::ignoreClasses()->clear(); QTest::ignoreClasses()->clear();
} }
bool QSignalDumper::s_isEnabled = false;
QT_END_NAMESPACE QT_END_NAMESPACE

View File

@ -60,11 +60,14 @@ class QByteArray;
class QSignalDumper class QSignalDumper
{ {
public: public:
static void setEnabled(bool);
static void startDump(); static void startDump();
static void endDump(); static void endDump();
static void ignoreClass(const QByteArray &klass); static void ignoreClass(const QByteArray &klass);
static void clearIgnoredClasses(); static void clearIgnoredClasses();
private:
static bool s_isEnabled;
}; };
QT_END_NAMESPACE QT_END_NAMESPACE

View File

@ -643,7 +643,7 @@ Q_TESTLIB_EXPORT void qtest_qParseArgs(int argc, const char *const argv[], bool
} else if (strcmp(argv[i], "-v2") == 0) { } else if (strcmp(argv[i], "-v2") == 0) {
QTestLog::setVerboseLevel(2); QTestLog::setVerboseLevel(2);
} else if (strcmp(argv[i], "-vs") == 0) { } else if (strcmp(argv[i], "-vs") == 0) {
QSignalDumper::startDump(); QSignalDumper::setEnabled(true);
} else if (strcmp(argv[i], "-o") == 0) { } else if (strcmp(argv[i], "-o") == 0) {
if (i + 1 >= argc) { if (i + 1 >= argc) {
fprintf(stderr, "-o needs an extra parameter specifying the filename and optional format\n"); fprintf(stderr, "-o needs an extra parameter specifying the filename and optional format\n");
@ -1485,6 +1485,8 @@ void TestMethods::invokeTests(QObject *testObject) const
watchDog.reset(new WatchDog); watchDog.reset(new WatchDog);
} }
QSignalDumper::startDump();
if (!QTestResult::skipCurrentTest() && !QTest::currentTestFailed()) { if (!QTestResult::skipCurrentTest() && !QTest::currentTestFailed()) {
if (m_initTestCaseMethod.isValid()) if (m_initTestCaseMethod.isValid())
m_initTestCaseMethod.invoke(testObject, Qt::DirectConnection); m_initTestCaseMethod.invoke(testObject, Qt::DirectConnection);
@ -1517,6 +1519,8 @@ void TestMethods::invokeTests(QObject *testObject) const
} }
QTestResult::finishedCurrentTestFunction(); QTestResult::finishedCurrentTestFunction();
QTestResult::setCurrentTestFunction(nullptr); QTestResult::setCurrentTestFunction(nullptr);
QSignalDumper::endDump();
} }
#if defined(Q_OS_WIN) #if defined(Q_OS_WIN)
@ -1965,8 +1969,6 @@ void QTest::qCleanup()
delete QBenchmarkGlobalData::current; delete QBenchmarkGlobalData::current;
QBenchmarkGlobalData::current = nullptr; QBenchmarkGlobalData::current = nullptr;
QSignalDumper::endDump();
#if defined(Q_OS_MACOS) #if defined(Q_OS_MACOS)
IOPMAssertionRelease(macPowerSavingDisabled); IOPMAssertionRelease(macPowerSavingDisabled);
#endif #endif

View File

@ -1,13 +1,11 @@
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
<testsuite errors="126" failures="0" tests="13" name="tst_Signaldumper"> <testsuite errors="124" failures="0" tests="13" name="tst_Signaldumper">
<properties> <properties>
<property value="@INSERT_QT_VERSION_HERE@" name="QTestVersion"/> <property value="@INSERT_QT_VERSION_HERE@" name="QTestVersion"/>
<property value="@INSERT_QT_VERSION_HERE@" name="QtVersion"/> <property value="@INSERT_QT_VERSION_HERE@" name="QtVersion"/>
<property value="" name="QtBuild"/> <property value="" name="QtBuild"/>
</properties> </properties>
<testcase result="pass" name="initTestCase"> <testcase result="pass" name="initTestCase"/>
<!-- message="Signal: QThread(_POINTER_) started ()" type="info" -->
</testcase>
<testcase result="pass" name="noConnections"> <testcase result="pass" name="noConnections">
<!-- message="Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()" type="info" --> <!-- message="Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()" type="info" -->
<!-- message="Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))" type="info" --> <!-- message="Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))" type="info" -->
@ -154,11 +152,8 @@
<testcase result="pass" name="deletingSender"> <testcase result="pass" name="deletingSender">
<!-- message="Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()" type="info" --> <!-- message="Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()" type="info" -->
</testcase> </testcase>
<testcase result="pass" name="cleanupTestCase"> <testcase result="pass" name="cleanupTestCase"/>
<!-- message=" Signal: QThread(_POINTER_) finished ()" type="info" -->
</testcase>
<system-err> <system-err>
<![CDATA[Signal: QThread(_POINTER_) started ()]]>
<![CDATA[Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()]]> <![CDATA[Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()]]>
<![CDATA[Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))]]> <![CDATA[Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))]]>
<![CDATA[Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()]]> <![CDATA[Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()]]>
@ -283,6 +278,5 @@
<![CDATA[Signal: SignalSlotClass(_POINTER_) qVariantSignal (QVariant())]]> <![CDATA[Signal: SignalSlotClass(_POINTER_) qVariantSignal (QVariant())]]>
<![CDATA[Signal: SignalSlotClass(_POINTER_) qVariantSignal (QVariant())]]> <![CDATA[Signal: SignalSlotClass(_POINTER_) qVariantSignal (QVariant())]]>
<![CDATA[Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()]]> <![CDATA[Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()]]>
<![CDATA[ Signal: QThread(_POINTER_) finished ()]]>
</system-err> </system-err>
</testsuite> </testsuite>

View File

@ -4,9 +4,6 @@
<QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion> <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
</Environment> </Environment>
<TestFunction name="initTestCase"> <TestFunction name="initTestCase">
<Message type="info" file="" line="0">
<Description><![CDATA[Signal: QThread(_POINTER_) started ()]]></Description>
</Message>
<Incident type="pass" file="" line="0" /> <Incident type="pass" file="" line="0" />
<Duration msecs="0"/> <Duration msecs="0"/>
</TestFunction> </TestFunction>
@ -579,7 +576,4 @@
<Incident type="pass" file="" line="0" /> <Incident type="pass" file="" line="0" />
<Duration msecs="0"/> <Duration msecs="0"/>
</TestFunction> </TestFunction>
<Message type="info" file="" line="0">
<Description><![CDATA[ Signal: QThread(_POINTER_) finished ()]]></Description>
</Message>
<Duration msecs="0"/> <Duration msecs="0"/>

View File

@ -1,6 +1,5 @@
TAP version 13 TAP version 13
# tst_Signaldumper # tst_Signaldumper
# Signal: QThread(_POINTER_) started ()
ok 1 - initTestCase() ok 1 - initTestCase()
# Signal: SignalSlotClass(_POINTER_) signalWithoutParameters () # Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
# Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m)) # Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
@ -146,7 +145,6 @@ ok 19 - variousTypes()
# Signal: SignalSlotClass(_POINTER_) signalWithoutParameters () # Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
ok 20 - deletingSender() ok 20 - deletingSender()
ok 21 - cleanupTestCase() ok 21 - cleanupTestCase()
# Signal: QThread(_POINTER_) finished ()
1..21 1..21
# tests 21 # tests 21
# pass 21 # pass 21

View File

@ -1,6 +1,5 @@
##teamcity[testSuiteStarted name='tst_Signaldumper' flowId='tst_Signaldumper'] ##teamcity[testSuiteStarted name='tst_Signaldumper' flowId='tst_Signaldumper']
##teamcity[testStarted name='initTestCase()' flowId='tst_Signaldumper'] ##teamcity[testStarted name='initTestCase()' flowId='tst_Signaldumper']
##teamcity[testStdOut name='initTestCase()' out='INFO: Signal: QThread(_POINTER_) started ()' flowId='tst_Signaldumper']
##teamcity[testFinished name='initTestCase()' flowId='tst_Signaldumper'] ##teamcity[testFinished name='initTestCase()' flowId='tst_Signaldumper']
##teamcity[testStarted name='noConnections()' flowId='tst_Signaldumper'] ##teamcity[testStarted name='noConnections()' flowId='tst_Signaldumper']
##teamcity[testStdOut name='noConnections()' out='INFO: Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()|nINFO: Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))' flowId='tst_Signaldumper'] ##teamcity[testStdOut name='noConnections()' out='INFO: Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()|nINFO: Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))' flowId='tst_Signaldumper']

View File

@ -1,6 +1,5 @@
********* Start testing of tst_Signaldumper ********* ********* Start testing of tst_Signaldumper *********
Config: Using QtTest library Config: Using QtTest library
INFO : tst_Signaldumper::initTestCase() Signal: QThread(_POINTER_) started ()
PASS : tst_Signaldumper::initTestCase() PASS : tst_Signaldumper::initTestCase()
INFO : tst_Signaldumper::noConnections() Signal: SignalSlotClass(_POINTER_) signalWithoutParameters () INFO : tst_Signaldumper::noConnections() Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
INFO : tst_Signaldumper::noConnections() Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m)) INFO : tst_Signaldumper::noConnections() Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
@ -146,6 +145,5 @@ PASS : tst_Signaldumper::variousTypes()
INFO : tst_Signaldumper::deletingSender() Signal: SignalSlotClass(_POINTER_) signalWithoutParameters () INFO : tst_Signaldumper::deletingSender() Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
PASS : tst_Signaldumper::deletingSender() PASS : tst_Signaldumper::deletingSender()
PASS : tst_Signaldumper::cleanupTestCase() PASS : tst_Signaldumper::cleanupTestCase()
INFO : tst_Signaldumper::UnknownTestFunc() Signal: QThread(_POINTER_) finished ()
Totals: 21 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms Totals: 21 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_Signaldumper ********* ********* Finished testing of tst_Signaldumper *********

View File

@ -6,9 +6,6 @@
<QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion> <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
</Environment> </Environment>
<TestFunction name="initTestCase"> <TestFunction name="initTestCase">
<Message type="info" file="" line="0">
<Description><![CDATA[Signal: QThread(_POINTER_) started ()]]></Description>
</Message>
<Incident type="pass" file="" line="0" /> <Incident type="pass" file="" line="0" />
<Duration msecs="0"/> <Duration msecs="0"/>
</TestFunction> </TestFunction>
@ -581,8 +578,5 @@
<Incident type="pass" file="" line="0" /> <Incident type="pass" file="" line="0" />
<Duration msecs="0"/> <Duration msecs="0"/>
</TestFunction> </TestFunction>
<Message type="info" file="" line="0">
<Description><![CDATA[ Signal: QThread(_POINTER_) finished ()]]></Description>
</Message>
<Duration msecs="0"/> <Duration msecs="0"/>
</TestCase> </TestCase>