summaryrefslogtreecommitdiffstats
path: root/src/testlib
diff options
context:
space:
mode:
Diffstat (limited to 'src/testlib')
-rw-r--r--src/testlib/.prev_CMakeLists.txt139
-rw-r--r--src/testlib/CMakeLists.txt135
-rw-r--r--src/testlib/Qt5TestConfigExtras.cmake.in5
-rw-r--r--src/testlib/configure.cmake34
-rw-r--r--src/testlib/qtestblacklist.cpp10
-rw-r--r--src/testlib/qtestcase.cpp22
-rw-r--r--src/testlib/qtestcase.h11
-rw-r--r--src/testlib/qtestkeyboard.h4
-rw-r--r--src/testlib/qtesttouch.h1
-rw-r--r--src/testlib/selfcover.cmake40
10 files changed, 389 insertions, 12 deletions
diff --git a/src/testlib/.prev_CMakeLists.txt b/src/testlib/.prev_CMakeLists.txt
new file mode 100644
index 0000000000..2eef3edbef
--- /dev/null
+++ b/src/testlib/.prev_CMakeLists.txt
@@ -0,0 +1,139 @@
+# Generated from testlib.pro.
+
+#####################################################################
+## Test Module:
+#####################################################################
+
+qt_add_module(Test
+ QMAKE_MODULE_CONFIG console testlib_defines
+ EXCEPTIONS
+ SOURCES
+ qabstracttestlogger.cpp qabstracttestlogger_p.h
+ qasciikey.cpp
+ qbenchmark.cpp qbenchmark.h qbenchmark_p.h
+ qbenchmarkevent.cpp qbenchmarkevent_p.h
+ qbenchmarkmeasurement.cpp qbenchmarkmeasurement_p.h
+ qbenchmarkmetric.cpp qbenchmarkmetric.h qbenchmarkmetric_p.h
+ qbenchmarkperfevents.cpp qbenchmarkperfevents_p.h
+ qbenchmarktimemeasurers_p.h
+ qcsvbenchmarklogger.cpp qcsvbenchmarklogger_p.h
+ qjunittestlogger.cpp qjunittestlogger_p.h
+ qplaintestlogger.cpp qplaintestlogger_p.h
+ qsignaldumper.cpp qsignaldumper_p.h
+ qsignalspy.h
+ qtaptestlogger.cpp qtaptestlogger_p.h
+ qteamcitylogger.cpp qteamcitylogger_p.h
+ qtest.h
+ qtest_gui.h
+ qtest_network.h
+ qtest_widgets.h
+ qtestaccessible.h
+ qtestassert.h
+ qtestblacklist.cpp qtestblacklist_p.h
+ qtestcase.cpp qtestcase.h
+ qtestcoreelement_p.h
+ qtestcorelist_p.h
+ qtestdata.cpp qtestdata.h
+ qtestelement.cpp qtestelement_p.h
+ qtestelementattribute.cpp qtestelementattribute_p.h
+ qtestevent.h
+ qtesteventloop.h
+ qtesthelpers_p.h
+ qtestjunitstreamer.cpp qtestjunitstreamer_p.h
+ qtestkeyboard.h
+ qtestlog.cpp qtestlog_p.h
+ qtestmouse.cpp qtestmouse.h
+ qtestresult.cpp qtestresult_p.h
+ qtestspontaneevent.h
+ qtestsystem.h
+ qtesttable.cpp qtesttable_p.h
+ qtesttouch.h
+ qttestglobal.h
+ qxmltestlogger.cpp qxmltestlogger_p.h
+ DEFINES
+ QT_NO_CAST_FROM_ASCII
+ QT_NO_CAST_TO_ASCII
+ QT_NO_DATASTREAM
+ QT_NO_FOREACH
+ LIBRARIES
+ Qt::CorePrivate
+ PUBLIC_LIBRARIES
+ Qt::Core
+ PRIVATE_MODULE_INTERFACE
+ Qt::CorePrivate
+)
+
+#### Keys ignored in scope 1:.:.:testlib.pro:<TRUE>:
+# MODULE_CONFIG = "console" "testlib_defines"
+
+## Scopes:
+#####################################################################
+
+#### Keys ignored in scope 2:.:.:testlib.pro:UNIX AND NOT embedded:
+# QMAKE_PKGCONFIG_DESCRIPTION = "Qt" "Unit" "Testing" "Library"
+
+qt_extend_target(Test CONDITION QT_FEATURE_itemmodeltester
+ SOURCES
+ qabstractitemmodeltester.cpp qabstractitemmodeltester.h
+)
+
+qt_extend_target(Test CONDITION QT_FEATURE_valgrind
+ SOURCES
+ qbenchmarkvalgrind.cpp qbenchmarkvalgrind_p.h
+)
+
+qt_extend_target(Test CONDITION embedded
+ COMPILE_OPTIONS
+ -fno-rtti
+)
+
+qt_extend_target(Test CONDITION APPLE
+ SOURCES
+ qappletestlogger.cpp qappletestlogger_p.h
+ PUBLIC_LIBRARIES
+ ${FWSecurity}
+)
+
+qt_extend_target(Test CONDITION MACOS
+ SOURCES
+ qtestutil_macos.mm qtestutil_macos_p.h
+ PUBLIC_LIBRARIES
+ ${FWAppKit}
+ ${FWApplicationServices}
+ ${FWFoundation}
+ ${FWIOKit}
+)
+
+qt_extend_target(Test CONDITION (APPLE) AND (OFF AND NOT lessThan(QMAKE_XCODE_VERSION, "6.0"))
+ SOURCES
+ qxctestlogger.mm qxctestlogger_p.h
+ DEFINES
+ HAVE_XCTEST
+ PUBLIC_LIBRARIES
+ ${FWFoundation}
+)
+
+qt_extend_target(Test CONDITION ((APPLE) AND (OFF AND NOT lessThan(QMAKE_XCODE_VERSION, "6.0"))) AND (NOT QMAKE_MAC_SDK_PLATFORM_PATH_ISEMPTY)
+ COMPILE_OPTIONS
+ -F/Developer/Library/Frameworks
+ LINK_OPTIONS
+ "-F$${platform_dev_frameworks_path}"
+ "-weak_framework"
+ "XCTest"
+)
+
+#### Keys ignored in scope 9:.:.:testlib.pro:NOT QMAKE_MAC_SDK_PLATFORM_PATH_ISEMPTY:
+# MODULE_CONFIG = "xctest"
+
+#### Keys ignored in scope 10:.:.:testlib.pro:NOT TARGET Qt::Gui:
+# HEADERSCLEAN_EXCLUDE = "qtest_gui.h" "qtestaccessible.h" "qtestkeyboard.h" "qtestmouse.h" "qtesttouch.h"
+
+#### Keys ignored in scope 11:.:.:testlib.pro:NOT TARGET Qt::Widgets:
+# HEADERSCLEAN_EXCLUDE = "qtest_widgets.h"
+
+#### Keys ignored in scope 12:.:.:testlib.pro:NOT TARGET Qt::Network:
+# HEADERSCLEAN_EXCLUDE = "qtest_network.h"
+qt_add_docs(Test
+ doc/qttestlib.qdocconf
+)
+
diff --git a/src/testlib/CMakeLists.txt b/src/testlib/CMakeLists.txt
new file mode 100644
index 0000000000..22ac94f764
--- /dev/null
+++ b/src/testlib/CMakeLists.txt
@@ -0,0 +1,135 @@
+# Generated from testlib.pro.
+
+# special case begin
+include(selfcover.cmake)
+# special case end
+
+#####################################################################
+## Test Module:
+#####################################################################
+
+qt_add_module(Test
+ CONFIG_MODULE_NAME testlib # special case
+ EXCEPTIONS
+ SOURCES
+ qabstracttestlogger.cpp qabstracttestlogger_p.h
+ qasciikey.cpp
+ qbenchmark.cpp qbenchmark.h qbenchmark_p.h
+ qbenchmarkevent.cpp qbenchmarkevent_p.h
+ qbenchmarkmeasurement.cpp qbenchmarkmeasurement_p.h
+ qbenchmarkmetric.cpp qbenchmarkmetric.h qbenchmarkmetric_p.h
+ qbenchmarkperfevents.cpp qbenchmarkperfevents_p.h
+ qbenchmarktimemeasurers_p.h
+ qcsvbenchmarklogger.cpp qcsvbenchmarklogger_p.h
+ qjunittestlogger.cpp qjunittestlogger_p.h
+ qplaintestlogger.cpp qplaintestlogger_p.h
+ qsignaldumper.cpp qsignaldumper_p.h
+ qsignalspy.h
+ qtaptestlogger.cpp qtaptestlogger_p.h
+ qteamcitylogger.cpp qteamcitylogger_p.h
+ qtest.h
+ qtest_gui.h
+ qtest_network.h
+ qtest_widgets.h
+ qtestaccessible.h
+ qtestassert.h
+ qtestblacklist.cpp qtestblacklist_p.h
+ qtestcase.cpp qtestcase.h
+ qtestcoreelement_p.h
+ qtestcorelist_p.h
+ qtestdata.cpp qtestdata.h
+ qtestelement.cpp qtestelement_p.h
+ qtestelementattribute.cpp qtestelementattribute_p.h
+ qtestevent.h
+ qtesteventloop.h
+ qtesthelpers_p.h
+ qtestjunitstreamer.cpp qtestjunitstreamer_p.h
+ qtestkeyboard.h
+ qtestlog.cpp qtestlog_p.h
+ qtestmouse.cpp qtestmouse.h
+ qtestresult.cpp qtestresult_p.h
+ qtestspontaneevent.h
+ qtestsystem.h
+ qtesttable.cpp qtesttable_p.h
+ qtesttouch.h
+ qttestglobal.h
+ qxmltestlogger.cpp qxmltestlogger_p.h
+ DEFINES
+ QT_NO_CAST_FROM_ASCII
+ QT_NO_CAST_TO_ASCII
+ QT_NO_DATASTREAM
+ QT_NO_FOREACH
+ QT_BUILD_TESTLIB_LIB # special case
+ LIBRARIES
+ Qt::CorePrivate
+ PUBLIC_LIBRARIES
+ Qt::Core
+ PRIVATE_MODULE_INTERFACE
+ Qt::CorePrivate
+)
+
+#### Keys ignored in scope 1:.:.:testlib.pro:<TRUE>:
+# MODULE_CONFIG = "console" "testlib_defines"
+
+## Scopes:
+#####################################################################
+
+#### Keys ignored in scope 2:.:.:testlib.pro:UNIX AND NOT embedded:
+# QMAKE_PKGCONFIG_DESCRIPTION = "Qt" "Unit" "Testing" "Library"
+
+qt_extend_target(Test CONDITION QT_FEATURE_itemmodeltester
+ SOURCES
+ qabstractitemmodeltester.cpp qabstractitemmodeltester.h
+)
+
+qt_extend_target(Test CONDITION QT_FEATURE_valgrind
+ SOURCES
+ qbenchmarkvalgrind.cpp qbenchmarkvalgrind_p.h
+)
+
+qt_extend_target(Test CONDITION embedded
+ COMPILE_OPTIONS
+ -fno-rtti
+)
+
+qt_extend_target(Test CONDITION APPLE
+ SOURCES
+ qappletestlogger.cpp qappletestlogger_p.h
+ PUBLIC_LIBRARIES
+ ${FWSecurity}
+)
+
+qt_extend_target(Test CONDITION MACOS
+ SOURCES
+ qtestutil_macos.mm qtestutil_macos_p.h
+ PUBLIC_LIBRARIES
+ ${FWAppKit}
+ ${FWApplicationServices}
+ ${FWFoundation}
+ ${FWIOKit}
+)
+
+# special case begin
+# Do not bother with disabled stuff:
+# extend_target(Test CONDITION (MACOS) AND (OFF AND NOT lessThan(QMAKE_XCODE_VERSION, "6.0")) ...
+# extend_target(Test CONDITION ((MACOS) AND (OFF AND NOT lessThan(QMAKE_XCODE_VERSION, "6.0"))) AND (NOT QMAKE_MAC_SDK_PLATFORM_PATH_ISEMPTY) ...
+# special case end
+
+#### Keys ignored in scope 9:.:.:testlib.pro:NOT QMAKE_MAC_SDK_PLATFORM_PATH_ISEMPTY:
+# MODULE_CONFIG = "xctest"
+
+#### Keys ignored in scope 10:.:.:testlib.pro:NOT TARGET Qt::Gui:
+# HEADERSCLEAN_EXCLUDE = "qtest_gui.h" "qtestaccessible.h" "qtestkeyboard.h" "qtestmouse.h" "qtesttouch.h"
+
+#### Keys ignored in scope 11:.:.:testlib.pro:NOT TARGET Qt::Widgets:
+# HEADERSCLEAN_EXCLUDE = "qtest_widgets.h"
+
+#### Keys ignored in scope 12:.:.:testlib.pro:NOT TARGET Qt::Network:
+# HEADERSCLEAN_EXCLUDE = "qtest_network.h"
+qt_add_docs(Test
+ doc/qttestlib.qdocconf
+)
+
+# special case begin
+qt_apply_testlib_coverage_options(Test)
+# special case end
diff --git a/src/testlib/Qt5TestConfigExtras.cmake.in b/src/testlib/Qt5TestConfigExtras.cmake.in
deleted file mode 100644
index 2a575958ae..0000000000
--- a/src/testlib/Qt5TestConfigExtras.cmake.in
+++ /dev/null
@@ -1,5 +0,0 @@
-
-set_property(TARGET Qt5::Test
- APPEND PROPERTY
- INTERFACE_COMPILE_DEFINITIONS QT_TESTCASE_BUILDDIR=\\\"\${CMAKE_BINARY_DIR}\\\"
-)
diff --git a/src/testlib/configure.cmake b/src/testlib/configure.cmake
new file mode 100644
index 0000000000..d83b4f09b0
--- /dev/null
+++ b/src/testlib/configure.cmake
@@ -0,0 +1,34 @@
+
+
+#### Inputs
+
+
+
+#### Libraries
+
+
+
+#### Tests
+
+
+
+#### Features
+
+qt_feature("testlib_selfcover" PUBLIC
+ LABEL "Coverage testing of testlib itself"
+ PURPOSE "Gauges how thoroughly testlib's selftest exercises testlib's code"
+ AUTODETECT OFF
+)
+qt_feature("itemmodeltester" PUBLIC
+ LABEL "Tester for item models"
+ PURPOSE "Provides a utility to test item models."
+ CONDITION QT_FEATURE_itemmodel
+)
+qt_feature("valgrind" PUBLIC
+ LABEL "Valgrind"
+ PURPOSE "Profiling support with callgrind."
+ CONDITION ( LINUX OR APPLE ) AND QT_FEATURE_process AND QT_FEATURE_regularexpression
+)
+qt_configure_add_summary_section(NAME "Qt Testlib")
+qt_configure_add_summary_entry(ARGS "itemmodeltester")
+qt_configure_end_summary_section() # end of "Qt Testlib" section
diff --git a/src/testlib/qtestblacklist.cpp b/src/testlib/qtestblacklist.cpp
index f9ccde0280..4554d6017a 100644
--- a/src/testlib/qtestblacklist.cpp
+++ b/src/testlib/qtestblacklist.cpp
@@ -190,10 +190,20 @@ static QSet<QByteArray> activeConditions()
if (!distributionName.isEmpty()) {
if (result.find(distributionName) == result.end())
result.insert(distributionName);
+ // backwards compatibility with Qt 5
+ if (distributionName == "macos") {
+ if (result.find(distributionName) == result.end())
+ result.insert("osx");
+ }
if (!distributionRelease.isEmpty()) {
QByteArray versioned = distributionName + "-" + distributionRelease;
if (result.find(versioned) == result.end())
result.insert(versioned);
+ if (distributionName == "macos") {
+ QByteArray versioned = "osx-" + distributionRelease;
+ if (result.find(versioned) == result.end())
+ result.insert(versioned);
+ }
}
}
diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp
index f45999c7fa..8b5df06d82 100644
--- a/src/testlib/qtestcase.cpp
+++ b/src/testlib/qtestcase.cpp
@@ -2162,7 +2162,8 @@ QSharedPointer<QTemporaryDir> QTest::qExtractTestData(const QString &dirName)
/*! \internal
*/
-QString QTest::qFindTestData(const QString& base, const char *file, int line, const char *builddir)
+QString QTest::qFindTestData(const QString& base, const char *file, int line, const char *builddir,
+ const char *sourcedir)
{
QString found;
@@ -2272,6 +2273,20 @@ QString QTest::qFindTestData(const QString& base, const char *file, int line, co
}
}
+ // 7. Try the supplied source directory
+ if (found.isEmpty() && sourcedir) {
+ const QString candidate = QFile::decodeName(sourcedir) % QLatin1Char('/') % base;
+ if (QFileInfo::exists(candidate)) {
+ found = candidate;
+ } else if (QTestLog::verboseLevel() >= 2) {
+ QTestLog::info(qPrintable(
+ QString::fromLatin1("testdata %1 not found in supplied source directory [%2]")
+ .arg(base, QDir::toNativeSeparators(candidate))),
+ file, line);
+ }
+ }
+
+
if (found.isEmpty()) {
QTest::qWarn(qPrintable(
QString::fromLatin1("testdata %1 could not be located!").arg(base)),
@@ -2287,9 +2302,10 @@ QString QTest::qFindTestData(const QString& base, const char *file, int line, co
/*! \internal
*/
-QString QTest::qFindTestData(const char *base, const char *file, int line, const char *builddir)
+QString QTest::qFindTestData(const char *base, const char *file, int line, const char *builddir,
+ const char *sourcedir)
{
- return qFindTestData(QFile::decodeName(base), file, line, builddir);
+ return qFindTestData(QFile::decodeName(base), file, line, builddir, sourcedir);
}
/*! \internal
diff --git a/src/testlib/qtestcase.h b/src/testlib/qtestcase.h
index e1518708e8..0498681670 100644
--- a/src/testlib/qtestcase.h
+++ b/src/testlib/qtestcase.h
@@ -213,8 +213,13 @@ do {\
QTest::qWarn(static_cast<const char *>(msg), __FILE__, __LINE__)
#ifdef QT_TESTCASE_BUILDDIR
+
+#ifndef QT_TESTCASE_SOURCEDIR
+#define QT_TESTCASE_SOURCEDIR nullptr
+#endif
+
# define QFINDTESTDATA(basepath)\
- QTest::qFindTestData(basepath, __FILE__, __LINE__, QT_TESTCASE_BUILDDIR)
+ QTest::qFindTestData(basepath, __FILE__, __LINE__, QT_TESTCASE_BUILDDIR, QT_TESTCASE_SOURCEDIR)
#else
# define QFINDTESTDATA(basepath)\
QTest::qFindTestData(basepath, __FILE__, __LINE__)
@@ -309,8 +314,8 @@ namespace QTest
#if QT_CONFIG(temporaryfile)
Q_TESTLIB_EXPORT QSharedPointer<QTemporaryDir> qExtractTestData(const QString &dirName);
#endif
- Q_TESTLIB_EXPORT QString qFindTestData(const char* basepath, const char* file = nullptr, int line = 0, const char* builddir = nullptr);
- Q_TESTLIB_EXPORT QString qFindTestData(const QString& basepath, const char* file = nullptr, int line = 0, const char* builddir = nullptr);
+ Q_TESTLIB_EXPORT QString qFindTestData(const char* basepath, const char* file = nullptr, int line = 0, const char* builddir = nullptr, const char* sourcedir = nullptr);
+ Q_TESTLIB_EXPORT QString qFindTestData(const QString& basepath, const char* file = nullptr, int line = 0, const char* builddir = nullptr, const char *sourcedir = nullptr);
Q_TESTLIB_EXPORT void *qData(const char *tagName, int typeId);
Q_TESTLIB_EXPORT void *qGlobalData(const char *tagName, int typeId);
diff --git a/src/testlib/qtestkeyboard.h b/src/testlib/qtestkeyboard.h
index e8a7e0d5f5..1882c858c1 100644
--- a/src/testlib/qtestkeyboard.h
+++ b/src/testlib/qtestkeyboard.h
@@ -54,7 +54,9 @@
#include <QtGui/qguiapplication.h>
#include <QtGui/qwindow.h>
#include <QtGui/qevent.h>
-#include <QtGui/qkeysequence.h>
+#if QT_CONFIG(shortcut)
+# include <QtGui/qkeysequence.h>
+#endif
#ifdef QT_WIDGETS_LIB
#include <QtWidgets/qwidget.h>
diff --git a/src/testlib/qtesttouch.h b/src/testlib/qtesttouch.h
index 20a9476ee7..a38e055882 100644
--- a/src/testlib/qtesttouch.h
+++ b/src/testlib/qtesttouch.h
@@ -52,6 +52,7 @@
#include <QtCore/qmap.h>
#include <QtGui/qevent.h>
#include <QtGui/qwindow.h>
+#include <QtGui/qtouchdevice.h>
#ifdef QT_WIDGETS_LIB
#include <QtWidgets/qwidget.h>
#endif
diff --git a/src/testlib/selfcover.cmake b/src/testlib/selfcover.cmake
new file mode 100644
index 0000000000..c04ffa7b01
--- /dev/null
+++ b/src/testlib/selfcover.cmake
@@ -0,0 +1,40 @@
+#
+# Hand crafted file based on selfcover.pri
+#
+
+# Overwrite CMake compiler
+function(__qt_testlib_patch_compiler_name variable)
+ get_filename_component(name ${${variable}} NAME)
+ set(${variable} cs${name} PARENT_SCOPE)
+endfunction()
+
+if (FEATURE_testlib_selfcover)
+ __qt_testlib_patch_compiler_name(CMAKE_C_COMPILER)
+ __qt_testlib_patch_compiler_name(CMAKE_CXX_COMPILER)
+ __qt_testlib_patch_compiler_name(CMAKE_CXX_COMPILER_AR)
+ __qt_testlib_patch_compiler_name(CMAKE_CXX_COMPILER_RANLIB)
+endif()
+
+# This enables verification that testlib itself is adequately tested,
+# as a grounds for trusting that testing with it is useful.
+function(qt_apply_testlib_coverage_options target)
+ if (NOT FEATURE_testlib_selfcover)
+ return()
+ endif()
+ # Exclude all non-testlib source from coverage instrumentation:
+ set(testlib_coverage_options
+ --cs-exclude-file-abs-wildcard="${${CMAKE_PROJECT_NAME}_SOURCE_DIR}/*"
+ --cs-include-file-abs-wildcard="*/src/testlib/*"
+ --cs-mcc # enable Multiple Condition Coverage
+ --cs-mcdc # enable Multiple Condition / Decision Coverage
+ # (recommended for ISO 26262 ASIL A, B and C -- highly recommended for ASIL D)
+ # https://doc.froglogic.com/squish-coco/4.1/codecoverage.html#sec%3Amcdc
+ )
+ target_compile_options(${target} PRIVATE
+ ${testlib_coverage_options}
+ )
+
+ target_link_options(${target} PRIVATE
+ ${testlib_coverage_options}
+ )
+endfunction()