From 7020efffbb931624fe3a39e71ef1d1042c154b1d Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Tue, 4 Oct 2022 09:58:24 +0200 Subject: [PATCH] Squish: Request application settings if necessary When recording a test case and the suite.conf does not specify the AUT to be used ask the user to specify the application and its arguments. Change-Id: I01aa96e16d4abc763aa4be7ddb285601e81f7a01 Reviewed-by: David Schulz --- src/plugins/squish/squishfilehandler.cpp | 73 +++++++++++++++++++++++- 1 file changed, 71 insertions(+), 2 deletions(-) diff --git a/src/plugins/squish/squishfilehandler.cpp b/src/plugins/squish/squishfilehandler.cpp index 435d3d70644..85fdb85c596 100644 --- a/src/plugins/squish/squishfilehandler.cpp +++ b/src/plugins/squish/squishfilehandler.cpp @@ -5,6 +5,7 @@ #include "opensquishsuitesdialog.h" #include "squishconstants.h" +#include "squishsettings.h" #include "squishtesttreemodel.h" #include "squishtools.h" #include "suiteconf.h" @@ -14,12 +15,19 @@ #include #include #include +#include +#include #include +#include +#include +#include #include #include #include #include +#include +#include namespace Squish { namespace Internal { @@ -28,6 +36,62 @@ static const char SK_OpenSuites[] = "SquishOpenSuites"; static SquishFileHandler *m_instance = nullptr; +class MappedAutDialog : public QDialog +{ +public: + MappedAutDialog() + { + auto label = new QLabel(Tr::tr("Application:"), this); + aut.addItem(Tr::tr("")); + arguments.setLabelText(Tr::tr("Arguments:")); + arguments.setDisplayStyle(Utils::StringAspect::LineEditDisplay); + + QWidget *widget = new QWidget(this); + auto buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this); + + using namespace Utils::Layouting; + Form { + label, &aut, br, + arguments, + st + }.attachTo(widget); + + QVBoxLayout *layout = new QVBoxLayout(this); + layout->addWidget(widget); + layout->addWidget(buttons); + setLayout(layout); + + QPushButton *okButton = buttons->button(QDialogButtonBox::Ok); + okButton->setEnabled(false); + connect(okButton, &QPushButton::clicked, + this, &QDialog::accept); + connect(buttons->button(QDialogButtonBox::Cancel), &QPushButton::clicked, + this, &QDialog::reject); + connect(&aut, &QComboBox::currentIndexChanged, + this, [this, okButton] (int index) { + okButton->setEnabled(index > 0); + }); + setWindowTitle(Tr::tr("Recording Settings")); + + auto squishTools = SquishTools::instance(); + connect(squishTools, &SquishTools::queryFinished, this, + [this] (const QString &out) { + SquishServerSettings s; + s.setFromXmlOutput(out); + QApplication::restoreOverrideCursor(); + for (const QString &app : s.mappedAuts.keys()) + aut.addItem(app); + }); + + QApplication::setOverrideCursor(Qt::WaitCursor); + squishTools->queryServerSettings(); + } + + + QComboBox aut; + Utils::StringAspect arguments; +}; + SquishFileHandler::SquishFileHandler(QObject *parent) : QObject(parent) { @@ -331,8 +395,13 @@ void SquishFileHandler::recordTestCase(const QString &suiteName, const QString & SuiteConf conf = SuiteConf::readSuiteConf( Utils::FilePath::fromString(m_suites.value(suiteName))); if (conf.aut().isEmpty()) { - // provide a choice of apps & args, set aut & args for conf - return; + MappedAutDialog dialog; + + if (dialog.exec() != QDialog::Accepted) + return; + + conf.setAut(dialog.aut.currentText()); + conf.setArguments(dialog.arguments.value()); } SquishTools::instance()->recordTestCase(suitePath.absolutePath(), testCaseName, conf);