diff options
Diffstat (limited to 'src/testlib')
-rw-r--r-- | src/testlib/.prev_CMakeLists.txt | 139 | ||||
-rw-r--r-- | src/testlib/CMakeLists.txt | 135 | ||||
-rw-r--r-- | src/testlib/Qt5TestConfigExtras.cmake.in | 5 | ||||
-rw-r--r-- | src/testlib/configure.cmake | 34 | ||||
-rw-r--r-- | src/testlib/qtestblacklist.cpp | 10 | ||||
-rw-r--r-- | src/testlib/qtestcase.cpp | 22 | ||||
-rw-r--r-- | src/testlib/qtestcase.h | 11 | ||||
-rw-r--r-- | src/testlib/qtestkeyboard.h | 4 | ||||
-rw-r--r-- | src/testlib/qtesttouch.h | 1 | ||||
-rw-r--r-- | src/testlib/selfcover.cmake | 40 |
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() |