From d1e04aae05e4ea17a6461cf323c9c15ede176b5b Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 9 Nov 2018 17:49:30 +0100 Subject: Fix pluginSupport autotest Our test machine does not have the image plugins we hardcoded, so be more flexible. This also tightens the test a bit. Change-Id: I0cc49b3066909ac3e4ec387515e689a00042f4d5 Reviewed-by: Oswald Buddenhagen Reviewed-by: Christian Stenger --- .../qtprofilesetup/templates/plugin_support.qbs | 23 +++++++++++ .../testdata-qt/plugin-support/modules/m1/m1.qbs | 10 ++++- .../testdata-qt/plugin-support/modules/m2/m2.qbs | 5 ++- .../testdata-qt/plugin-support/plugin-support.qbs | 4 +- tests/auto/blackbox/tst_blackboxqt.cpp | 48 ++++++++++++++++++---- tests/auto/blackbox/tst_blackboxqt.h | 1 + 6 files changed, 80 insertions(+), 11 deletions(-) diff --git a/src/lib/qtprofilesetup/templates/plugin_support.qbs b/src/lib/qtprofilesetup/templates/plugin_support.qbs index c7e479f55..13d95c383 100644 --- a/src/lib/qtprofilesetup/templates/plugin_support.qbs +++ b/src/lib/qtprofilesetup/templates/plugin_support.qbs @@ -49,4 +49,27 @@ Module { Array.prototype.push.apply(list, eppt[t]); return list; } + + validate: { + var ppt = pluginsByType; + if (!ppt) + return; + var appt = allPluginsByType; + for (var i = 0; i < ppt.length; ++i) { + for (var pluginType in ppt[i]) { + var requestedPlugins = ppt[i][pluginType]; + if (!requestedPlugins) + continue; + var availablePlugins = appt[pluginType] || []; + if (typeof requestedPlugins === "string") + requestedPlugins = [requestedPlugins]; + for (var j = 0; j < requestedPlugins.length; ++j) { + if (!availablePlugins.contains(requestedPlugins[j])) { + throw "Plugin '" + requestedPlugins[j] + "' of type '" + pluginType + + "' was requested, but is not available."; + } + } + } + } + } } diff --git a/tests/auto/blackbox/testdata-qt/plugin-support/modules/m1/m1.qbs b/tests/auto/blackbox/testdata-qt/plugin-support/modules/m1/m1.qbs index d634742f3..a4cad304f 100644 --- a/tests/auto/blackbox/testdata-qt/plugin-support/modules/m1/m1.qbs +++ b/tests/auto/blackbox/testdata-qt/plugin-support/modules/m1/m1.qbs @@ -1,4 +1,12 @@ Module { + property bool useDummy Depends { name: "Qt.plugin_support" } - Qt.plugin_support.pluginsByType: ({imageformats: "qjpeg"}) + Properties { + condition: useDummy + Qt.plugin_support.pluginsByType: ({imageformats: "dummy"}) + } + Properties { + condition: Qt.plugin_support.allPluginsByType && Qt.plugin_support.allPluginsByType.imageformats + Qt.plugin_support.pluginsByType: ({imageformats: Qt.plugin_support.allPluginsByType.imageformats[0]}) + } } diff --git a/tests/auto/blackbox/testdata-qt/plugin-support/modules/m2/m2.qbs b/tests/auto/blackbox/testdata-qt/plugin-support/modules/m2/m2.qbs index 4941495ff..c4730ab6b 100644 --- a/tests/auto/blackbox/testdata-qt/plugin-support/modules/m2/m2.qbs +++ b/tests/auto/blackbox/testdata-qt/plugin-support/modules/m2/m2.qbs @@ -1,4 +1,7 @@ Module { Depends { name: "Qt.plugin_support" } - Qt.plugin_support.pluginsByType: ({imageformats: "qgif"}) + Properties { + condition: Qt.plugin_support.allPluginsByType && Qt.plugin_support.allPluginsByType.imageformats + Qt.plugin_support.pluginsByType: ({imageformats: Qt.plugin_support.allPluginsByType.imageformats[1]}) + } } diff --git a/tests/auto/blackbox/testdata-qt/plugin-support/plugin-support.qbs b/tests/auto/blackbox/testdata-qt/plugin-support/plugin-support.qbs index 6ea0ecc51..c554a7dc2 100644 --- a/tests/auto/blackbox/testdata-qt/plugin-support/plugin-support.qbs +++ b/tests/auto/blackbox/testdata-qt/plugin-support/plugin-support.qbs @@ -3,9 +3,11 @@ QtGuiApplication { id: staticProbe property bool isStaticQt: Qt.gui.isStaticLibrary property var plugins: Qt.plugin_support.effectivePluginsByType + property var allPlugins: Qt.plugin_support.allPluginsByType configure: { console.info("static Qt: " + isStaticQt); - console.info("image plugins: " + plugins.imageformats); + console.info("requested image plugins: %" + plugins.imageformats + "%"); + console.info("all image plugins: #" + allPlugins.imageformats + "#"); console.info("platform plugin count: " + (plugins.platforms || []).length); } } diff --git a/tests/auto/blackbox/tst_blackboxqt.cpp b/tests/auto/blackbox/tst_blackboxqt.cpp index dfaaba504..ce97979e7 100644 --- a/tests/auto/blackbox/tst_blackboxqt.cpp +++ b/tests/auto/blackbox/tst_blackboxqt.cpp @@ -256,21 +256,53 @@ void TestBlackboxQt::pluginMetaData() QVERIFY2(m_qbsStdout.contains("moc"), m_qbsStdout.constData()); } +void TestBlackboxQt::pluginSupport_data() +{ + QTest::addColumn("invalidPlugin"); + QTest::newRow("request valid plugins") << false; + QTest::newRow("request invalid plugin") << true; +} + void TestBlackboxQt::pluginSupport() { QDir::setCurrent(testDataDir + "/plugin-support"); - QCOMPARE(runQbs(), 0); + QFETCH(bool, invalidPlugin); + QbsRunParameters resolveParams("resolve"); + if (invalidPlugin) { + resolveParams.arguments << "modules.m1.useDummy:true"; + resolveParams.expectFailure = true; + } + QCOMPARE(runQbs(resolveParams) == 0, !invalidPlugin); + if (invalidPlugin) { + QVERIFY2(m_qbsStderr.contains("Plugin 'dummy' of type 'imageformats' was requested, " + "but is not available"), m_qbsStderr.constData()); + return; + } const bool isStaticQt = m_qbsStdout.contains("static Qt: true"); const bool isDynamicQt = m_qbsStdout.contains("static Qt: false"); QVERIFY(isStaticQt != isDynamicQt); - QVERIFY2(!m_qbsStdout.contains("qt_plugin_import_qico.cpp"), m_qbsStdout.constData()); - if (isStaticQt) { - QVERIFY2(m_qbsStdout.contains("image plugins: qjpeg,qgif"), m_qbsStdout.constData()); + if (isStaticQt) QVERIFY2(m_qbsStdout.contains("platform plugin count: 1"), m_qbsStdout.constData()); - QVERIFY2(m_qbsStdout.contains("qt_plugin_import_qjpeg.cpp"), m_qbsStdout.constData()); - QVERIFY2(m_qbsStdout.contains("qt_plugin_import_qgif.cpp"), m_qbsStdout.constData()); - } else { - QSKIP("Qt is not static"); + else + QVERIFY2(m_qbsStdout.contains("platform plugin count: 0"), m_qbsStdout.constData()); + const auto extractList = [this](const char sep) { + const int listStartIndex = m_qbsStdout.indexOf(sep); + const int listEndIndex = m_qbsStdout.indexOf(sep, listStartIndex + 1); + const QByteArray listString = m_qbsStdout.mid(listStartIndex + 1, + listEndIndex - listStartIndex - 1); + return listString.isEmpty() ? QByteArrayList() : listString.split(','); + }; + const QByteArrayList enabledPlugins = extractList('%'); + if (isStaticQt) + QCOMPARE(enabledPlugins.size(), 2); + else + QVERIFY(enabledPlugins.empty()); + const QByteArrayList allPlugins = extractList('#'); + QVERIFY(allPlugins.size() >= enabledPlugins.size()); + QCOMPARE(runQbs(), 0); + for (const QByteArray &plugin : allPlugins) { + QCOMPARE(m_qbsStdout.contains("qt_plugin_import_" + plugin + ".cpp"), + enabledPlugins.contains(plugin)); } } diff --git a/tests/auto/blackbox/tst_blackboxqt.h b/tests/auto/blackbox/tst_blackboxqt.h index b843978d4..f42c225d8 100644 --- a/tests/auto/blackbox/tst_blackboxqt.h +++ b/tests/auto/blackbox/tst_blackboxqt.h @@ -57,6 +57,7 @@ private slots: void mocSameFileName(); void pkgconfig(); void pluginMetaData(); + void pluginSupport_data(); void pluginSupport(); void qmlDebugging(); void qobjectInObjectiveCpp(); -- cgit v1.2.3