From 3989245562dbd8f98a4e85adb89c75c1b7a1bbe3 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Fri, 27 Nov 2020 09:47:57 +0100 Subject: [PATCH] AutoTest: Allow handling of maximum warnings for QtTest If the maximum number of warnings is reached the test will be canceled automatically. Allow to handle this from the user side in case it might be needed. Fixes: QTCREATORBUG-26637 Change-Id: I239eca280cdc2ce46f6d64cd53b8f3ad0205f7f2 Reviewed-by: David Schulz --- .../src/howto/creator-only/creator-autotest.qdoc | 5 +++++ src/plugins/autotest/qtest/qttest_utils.cpp | 4 ++-- .../autotest/qtest/qttestconfiguration.cpp | 3 +++ src/plugins/autotest/qtest/qttestsettings.cpp | 16 ++++++++++++++++ src/plugins/autotest/qtest/qttestsettings.h | 2 ++ .../autotest/quick/quicktestconfiguration.cpp | 4 ++++ 6 files changed, 32 insertions(+), 2 deletions(-) diff --git a/doc/qtcreator/src/howto/creator-only/creator-autotest.qdoc b/doc/qtcreator/src/howto/creator-only/creator-autotest.qdoc index 66f38bc0bf9..4447c342cea 100644 --- a/doc/qtcreator/src/howto/creator-only/creator-autotest.qdoc +++ b/doc/qtcreator/src/howto/creator-only/creator-autotest.qdoc @@ -470,6 +470,11 @@ To record information about signals and slots in the test log, select the \uicontrol {Log signals and slots} check box. + To explicitly limit the maximum number of warnings in the test log, select + the \uicontrol {Limit warnings} check box and specify the intended number + inside the spin box next to it. Set the number to 0 if you want no limit + at all. The default number is 2000. + \section2 Specifying Settings for Running Google Tests To specify settings for running Google tests, select \uicontrol Tools > diff --git a/src/plugins/autotest/qtest/qttest_utils.cpp b/src/plugins/autotest/qtest/qttest_utils.cpp index 8f945367066..66ab170a4e8 100644 --- a/src/plugins/autotest/qtest/qttest_utils.cpp +++ b/src/plugins/autotest/qtest/qttest_utils.cpp @@ -98,9 +98,9 @@ QStringList filterInterfering(const QStringList &provided, QStringList *omitted, "-functions", "-datatags", "-nocrashhandler", "-callgrind", "-perf", "-perfcounterlist", "-tickcounter", "-eventcounter", "-help" }; - static const QSet knownInterferingOptionWithParameter = { "-o" }; + static const QSet knownInterferingOptionWithParameter = { "-o", "-maxwarnings" }; static const QSet knownAllowedOptionsWithParameter { - "-eventdelay", "-keydelay", "-mousedelay", "-maxwarnings", "-perfcounter", + "-eventdelay", "-keydelay", "-mousedelay", "-perfcounter", "-minimumvalue", "-minimumtotal", "-iterations", "-median" }; diff --git a/src/plugins/autotest/qtest/qttestconfiguration.cpp b/src/plugins/autotest/qtest/qttestconfiguration.cpp index a7305eeb729..7f613702137 100644 --- a/src/plugins/autotest/qtest/qttestconfiguration.cpp +++ b/src/plugins/autotest/qtest/qttestconfiguration.cpp @@ -76,6 +76,9 @@ QStringList QtTestConfiguration::argumentsForTestRunner(QStringList *omitted) co if (isDebugRunMode() && qtSettings->noCrashHandler.value()) arguments << "-nocrashhandler"; + if (qtSettings->limitWarnings.value() && qtSettings->maxWarnings.value() != 2000) + arguments << "-maxwarnings" << QString::number(qtSettings->maxWarnings.value()); + return arguments; } diff --git a/src/plugins/autotest/qtest/qttestsettings.cpp b/src/plugins/autotest/qtest/qttestsettings.cpp index f98cdc43574..a8d5626aa1a 100644 --- a/src/plugins/autotest/qtest/qttestsettings.cpp +++ b/src/plugins/autotest/qtest/qttestsettings.cpp @@ -79,6 +79,19 @@ QtTestSettings::QtTestSettings() logSignalsSlots.setSettingsKey("LogSignalsSlots"); logSignalsSlots.setLabelText(tr("Log signals and slots")); logSignalsSlots.setToolTip(tr("Log every signal emission and resulting slot invocations.")); + + registerAspect(&limitWarnings); + limitWarnings.setSettingsKey("LimitWarnings"); + limitWarnings.setLabelText(tr("Limit warnings")); + limitWarnings.setToolTip(tr("Set the maximum number of warnings. 0 means that the number " + "is not limited.")); + + registerAspect(&maxWarnings); + maxWarnings.setSettingsKey("MaxWarnings"); + maxWarnings.setRange(0, 10000); + maxWarnings.setDefaultValue(2000); + maxWarnings.setSpecialValueText(tr("Unlimited")); + maxWarnings.setEnabler(&limitWarnings); } QString QtTestSettings::metricsTypeToOption(const MetricsType type) @@ -115,6 +128,9 @@ QtTestSettingsPage::QtTestSettingsPage(QtTestSettings *settings, Id settingsId) s.useXMLOutput, s.verboseBench, s.logSignalsSlots, + Row { + s.limitWarnings, s.maxWarnings + }, Group { Title(QtTestSettings::tr("Benchmark Metrics")), s.metrics diff --git a/src/plugins/autotest/qtest/qttestsettings.h b/src/plugins/autotest/qtest/qttestsettings.h index bc890591524..682f66c5d77 100644 --- a/src/plugins/autotest/qtest/qttestsettings.h +++ b/src/plugins/autotest/qtest/qttestsettings.h @@ -54,6 +54,8 @@ public: Utils::BoolAspect useXMLOutput; Utils::BoolAspect verboseBench; Utils::BoolAspect logSignalsSlots; + Utils::BoolAspect limitWarnings; + Utils::IntegerAspect maxWarnings; }; class QtTestSettingsPage final : public Core::IOptionsPage diff --git a/src/plugins/autotest/quick/quicktestconfiguration.cpp b/src/plugins/autotest/quick/quicktestconfiguration.cpp index bd02a88be20..8ede65e66bc 100644 --- a/src/plugins/autotest/quick/quicktestconfiguration.cpp +++ b/src/plugins/autotest/quick/quicktestconfiguration.cpp @@ -79,6 +79,10 @@ QStringList QuickTestConfiguration::argumentsForTestRunner(QStringList *omitted) if (qtSettings->noCrashHandler.value()) arguments << "-nocrashhandler"; } + + if (qtSettings->limitWarnings.value() && qtSettings->maxWarnings.value() != 2000) + arguments << "-maxwarnings" << QString::number(qtSettings->maxWarnings.value()); + return arguments; }