summaryrefslogtreecommitdiffstats
path: root/src/testlib
diff options
context:
space:
mode:
Diffstat (limited to 'src/testlib')
-rw-r--r--src/testlib/qtestcase.cpp13
-rw-r--r--src/testlib/qtestlog.cpp19
-rw-r--r--src/testlib/qtestlog_p.h3
3 files changed, 31 insertions, 4 deletions
diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp
index 0440e26aca..d94abff23c 100644
--- a/src/testlib/qtestcase.cpp
+++ b/src/testlib/qtestcase.cpp
@@ -934,16 +934,24 @@ QT_BEGIN_NAMESPACE
QTouchEventSequence is called (ie when the object returned runs out of scope).
*/
-static void installCoverageTool(const char * appname, const char * testname)
+static bool installCoverageTool(const char * appname, const char * testname)
{
#ifdef __COVERAGESCANNER__
+ if (!qgetenv("QT_TESTCOCOON_ACTIVE").isEmpty())
+ return false;
+ // Set environment variable QT_TESTCOCOON_ACTIVE to prevent an eventual subtest from
+ // being considered as a stand-alone test regarding the coverage analysis.
+ qputenv("QT_TESTCOCOON_ACTIVE", "1");
+
// Install Coverage Tool
__coveragescanner_install(appname);
__coveragescanner_testname(testname);
__coveragescanner_clear();
+ return true;
#else
Q_UNUSED(appname);
Q_UNUSED(testname);
+ return false;
#endif
}
@@ -1962,7 +1970,8 @@ int QTest::qExec(QObject *testObject, int argc, char **argv)
qtest_qParseArgs(argc, argv, false);
- installCoverageTool(argv[0], metaObject->className());
+ bool installedTestCoverage = installCoverageTool(argv[0], metaObject->className());
+ QTestLog::setInstalledTestCoverage(installedTestCoverage);
#ifdef QTESTLIB_USE_VALGRIND
if (QBenchmarkGlobalData::current->mode() == QBenchmarkGlobalData::CallgrindParentProcess) {
diff --git a/src/testlib/qtestlog.cpp b/src/testlib/qtestlog.cpp
index 29dfbc144e..c8487a2c54 100644
--- a/src/testlib/qtestlog.cpp
+++ b/src/testlib/qtestlog.cpp
@@ -56,9 +56,11 @@
QT_BEGIN_NAMESPACE
-static void saveCoverageTool(const char * appname, bool testfailed)
+static void saveCoverageTool(const char * appname, bool testfailed, bool installedTestCoverage)
{
#ifdef __COVERAGESCANNER__
+ if (!installedTestCoverage)
+ return;
// install again to make sure the filename is correct.
// without this, a plugin or similar may have changed the filename.
__coveragescanner_install(appname);
@@ -66,9 +68,11 @@ static void saveCoverageTool(const char * appname, bool testfailed)
__coveragescanner_save();
__coveragescanner_testname("");
__coveragescanner_clear();
+ unsetenv("QT_TESTCOCOON_ACTIVE");
#else
Q_UNUSED(appname);
Q_UNUSED(testfailed);
+ Q_UNUSED(installedTestCoverage);
#endif
}
@@ -198,6 +202,7 @@ namespace QTest {
static int verbosity = 0;
static int maxWarnings = 2002;
+ static bool installedTestCoverage = true;
static QtMsgHandler oldMessageHandler;
@@ -388,7 +393,7 @@ void QTestLog::stopLogging()
QTest::TestLoggers::stopLogging();
QTest::TestLoggers::destroyLoggers();
QTest::loggerUsingStdout = false;
- saveCoverageTool(QTestResult::currentAppname(), failCount() != 0);
+ saveCoverageTool(QTestResult::currentAppname(), failCount() != 0, QTestLog::installedTestCoverage());
}
void QTestLog::addLogger(LogMode mode, const char *filename)
@@ -502,4 +507,14 @@ void QTestLog::resetCounters()
QTest::skips = 0;
}
+void QTestLog::setInstalledTestCoverage(bool installed)
+{
+ QTest::installedTestCoverage = installed;
+}
+
+bool QTestLog::installedTestCoverage()
+{
+ return QTest::installedTestCoverage;
+}
+
QT_END_NAMESPACE
diff --git a/src/testlib/qtestlog_p.h b/src/testlib/qtestlog_p.h
index 1fe52367ec..1a9754e460 100644
--- a/src/testlib/qtestlog_p.h
+++ b/src/testlib/qtestlog_p.h
@@ -103,6 +103,9 @@ public:
static void resetCounters();
+ static void setInstalledTestCoverage(bool installed);
+ static bool installedTestCoverage();
+
private:
QTestLog();
~QTestLog();