PluginManager: Provide helpful output if unit tests cannot be run

We can show the errors directly, rather than asking the user to re-run
Creator with different arguments.

Change-Id: If8196ba3a496406f5539a91e678d26a9a4801b85
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
Christian Kandeler
2019-07-25 13:59:27 +02:00
parent 7705fbb701
commit 928550ed79
2 changed files with 13 additions and 2 deletions

View File

@@ -354,6 +354,15 @@ bool PluginManager::hasError()
});
}
const QStringList PluginManager::allErrors()
{
return Utils::transform<QStringList>(Utils::filtered(plugins(), [](const PluginSpec *spec) {
return spec->hasError() && spec->isEffectivelyEnabled();
}), [](const PluginSpec *spec) {
return spec->name().append(": ").append(spec->errorString());
});
}
/*!
Returns all plugins that require \a spec to be loaded. Recurses into dependencies.
*/
@@ -1120,8 +1129,9 @@ static TestPlan generateCustomTestPlan(IPlugin *plugin,
void PluginManagerPrivate::startTests()
{
if (PluginManager::hasError()) {
qWarning("Errors occurred while loading plugins, skipping test run. "
"For details, start without \"-test\" option.");
qWarning("Errors occurred while loading plugins, skipping test run.");
for (const QString &pluginError : PluginManager::allErrors())
qWarning("%s", qPrintable(pluginError));
QTimer::singleShot(1, QCoreApplication::instance(), &QCoreApplication::quit);
return;
}

View File

@@ -93,6 +93,7 @@ public:
static const QVector<PluginSpec *> plugins();
static QHash<QString, QVector<PluginSpec *>> pluginCollections();
static bool hasError();
static const QStringList allErrors();
static QSet<PluginSpec *> pluginsRequiringPlugin(PluginSpec *spec);
static QSet<PluginSpec *> pluginsRequiredByPlugin(PluginSpec *spec);