summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorMichal Klocek <michal.klocek@qt.io>2017-09-05 12:43:49 +0200
committerMichal Klocek <michal.klocek@qt.io>2017-10-02 11:23:45 +0000
commit8faa8086e77059d5449f946e0bd0f78e61213a2a (patch)
treeaefcfcc9a6db02fbd3b9652d5b3ccb4b0dbd906b /tests
parent416fc118fc5a2d9259a9c1a63768eb0f3516a873 (diff)
Check if modules exists and skip bic and symbol tests
Run qmake to see if modules are compiled and installed. If not skip the bic and symbol tests. Task-number: QTBUG-63005 Change-Id: I7a0a21a3da395ea99ff467927a3284796835041b Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'tests')
-rw-r--r--tests/postbuild/bic/tst_bic.cpp7
-rw-r--r--tests/postbuild/global.h77
-rw-r--r--tests/postbuild/symbols/tst_symbols.cpp6
3 files changed, 71 insertions, 19 deletions
diff --git a/tests/postbuild/bic/tst_bic.cpp b/tests/postbuild/bic/tst_bic.cpp
index 59f30c79..cde23efb 100644
--- a/tests/postbuild/bic/tst_bic.cpp
+++ b/tests/postbuild/bic/tst_bic.cpp
@@ -363,11 +363,12 @@ void tst_Bic::initTestCase()
);
}
- modules = qt_tests_shared_global_get_modules(configFile);
+ QString workDir = qtModuleDir + QStringLiteral("/tests/global");
+ modules = qt_tests_shared_global_get_modules(workDir, configFile);
- QVERIFY2(modules.size() > 0, "Something is wrong in the global config file.");
+ if (!modules.size())
+ QSKIP("No modules found.");
- QString workDir = qtModuleDir + "/tests/global";
incPaths = qt_tests_shared_global_get_include_paths(workDir, modules);
QVERIFY2(incPaths.size() > 0, "Parse INCPATH failed.");
diff --git a/tests/postbuild/global.h b/tests/postbuild/global.h
index 86c6666d..fd5fd2e6 100644
--- a/tests/postbuild/global.h
+++ b/tests/postbuild/global.h
@@ -34,10 +34,17 @@
#include <QtTest/QtTest>
QStringList qt_tests_shared_global_get_include_path(const QString &makeFile);
-QHash<QString, QString> qt_tests_shared_global_get_modules(const QString &configFile);
+QHash<QString, QString> qt_tests_shared_global_get_modules(const QString &workDir,
+ const QString &configFile);
QStringList qt_tests_shared_global_get_include_paths();
-QHash<QString, QString> qt_tests_shared_global_get_modules(const QString &configFile)
+QStringList qt_tests_shared_run_qmake(const QString &workDir,
+ const QByteArray &proFileConent,
+ QStringList(*makeFileParser)(const QString&));
+QStringList qt_tests_shared_global_get_export_modules(const QString &makeFile);
+void qt_tests_shared_filter_module_list(const QString &workDir, QHash<QString, QString> &modules);
+
+QHash<QString, QString> qt_tests_shared_global_get_modules(const QString &workDir, const QString &configFile)
{
QHash<QString, QString> modules;
@@ -72,6 +79,8 @@ QHash<QString, QString> qt_tests_shared_global_get_modules(const QString &config
file.close();
+ qt_tests_shared_filter_module_list(workDir, modules);
+
qDebug() << "modules keys:" << modules.keys();
qDebug() << "modules values:" << modules.values();
@@ -85,33 +94,56 @@ QByteArray qt_tests_shared_global_get_modules_pro_lines(const QHash<QString, QSt
QByteArray module = moduleName.toLatin1();
result += "qtHaveModule(" + module + ") {\n" +
" QT += " + module + "\n" +
+ " MODULES += " + module + "\n" +
"}\n";
}
+ result += "QMAKE_EXTRA_VARIABLES += MODULES\n";
return result;
}
-QStringList qt_tests_shared_global_get_include_paths(const QString &workDir, QHash<QString, QString> &modules)
+QStringList qt_tests_shared_global_get_include_paths(const QString &workDir,
+ QHash<QString, QString> &modules)
+{
+ return qt_tests_shared_run_qmake(workDir,
+ qt_tests_shared_global_get_modules_pro_lines(modules),
+ &qt_tests_shared_global_get_include_path);
+}
+
+void qt_tests_shared_filter_module_list(const QString &workDir, QHash<QString, QString> &modules)
+{
+ const QStringList result = qt_tests_shared_run_qmake(workDir,
+ qt_tests_shared_global_get_modules_pro_lines(modules),
+ &qt_tests_shared_global_get_export_modules);
+ const QStringList keys = modules.keys();
+ for (const QString &key : keys) {
+ if (!result.contains(modules[key]))
+ modules.remove(key);
+ }
+}
+
+QStringList qt_tests_shared_run_qmake(const QString &workDir,
+ const QByteArray &proFileContent,
+ QStringList(*makeFileParser)(const QString&))
{
QString proFile = workDir + "/global.pro";
QString makeFile = workDir + "/Makefile";
- QStringList incPaths;
+ QStringList result;
#ifndef QT_NO_PROCESS
QFile file(proFile);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
QWARN("Can't open the pro file for global.");
- return incPaths;
+ return result;
}
- QByteArray proLines = qt_tests_shared_global_get_modules_pro_lines(modules);
- file.write(proLines);
+ file.write(proFileContent);
file.flush();
file.close();
if (!QDir::setCurrent(workDir)) {
QWARN("Change working dir failed.");
- return incPaths;
+ return result;
}
QString qmakeApp = "qmake";
@@ -124,20 +156,20 @@ QStringList qt_tests_shared_global_get_include_paths(const QString &workDir, QHa
proc.start(qmakeApp, qmakeArgs, QIODevice::ReadOnly);
if (!proc.waitForFinished(6000000)) {
qWarning() << qmakeApp << qmakeArgs << "in" << workDir << "didn't finish" << proc.errorString();
- return incPaths;
+ return result;
}
if (proc.exitCode() != 0) {
qWarning() << qmakeApp << qmakeArgs << "in" << workDir << "returned with" << proc.exitCode();
qDebug() << proc.readAllStandardError();
- return incPaths;
+ return result;
}
QFile::remove(proFile);
- incPaths = qt_tests_shared_global_get_include_path(makeFile);
+ result = makeFileParser(makeFile);
#ifdef Q_OS_WIN
- if (incPaths.isEmpty())
- incPaths = qt_tests_shared_global_get_include_path(makeFile + QLatin1String(".Release"));
+ if (result.isEmpty())
+ result = makeFileParser(makeFile + QLatin1String(".Release"));
#endif
QFile::remove(makeFile);
@@ -145,7 +177,7 @@ QStringList qt_tests_shared_global_get_include_paths(const QString &workDir, QHa
Q_UNUSED(modules);
#endif // QT_NO_PROCESS
- return incPaths;
+ return result;
}
QStringList qt_tests_shared_global_get_include_path(const QString &makeFile)
@@ -178,4 +210,21 @@ QStringList qt_tests_shared_global_get_include_path(const QString &makeFile)
return QStringList();
}
+QStringList qt_tests_shared_global_get_export_modules(const QString &makeFile)
+{
+ QFile file(makeFile);
+ if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
+ return QStringList();
+ QTextStream in(&file);
+ while (!in.atEnd()) {
+ QString line = in.readLine();
+ int index = line.indexOf('=');
+ if (index > 13 && line.startsWith(QLatin1String("EXPORT_MODULES"))) {
+ QString relatives = line.mid(index + 1);
+ return relatives.split(QChar(' '), QString::SkipEmptyParts);
+ }
+ }
+ return QStringList();
+}
+
#endif // QT_TESTS_SHARED_GLOBAL_H_INCLUDED
diff --git a/tests/postbuild/symbols/tst_symbols.cpp b/tests/postbuild/symbols/tst_symbols.cpp
index 7816254f..98766654 100644
--- a/tests/postbuild/symbols/tst_symbols.cpp
+++ b/tests/postbuild/symbols/tst_symbols.cpp
@@ -75,9 +75,11 @@ void tst_Symbols::initTestCase()
);
}
- modules = qt_tests_shared_global_get_modules(configFile);
+ QString workDir = qtModuleDir + QStringLiteral("/tests/global");
+ modules = qt_tests_shared_global_get_modules(workDir, configFile);
- QVERIFY2(modules.size() > 0, "Something is wrong in the global config file.");
+ if (!modules.size())
+ QSKIP("No modules found.");
qtLibDir = QLibraryInfo::location( QLibraryInfo::LibrariesPath );
QFileInfo qtLibDirInfo(qtLibDir);