From df758fd1595f7d18ddc132367983590f59073450 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Sat, 3 Dec 2016 10:20:45 +0200 Subject: [PATCH 1/2] Redesign AbstractTest::Run. --HG-- branch : develop --- src/libs/vmisc/abstracttest.cpp | 24 ++++++++++--------- src/libs/vmisc/abstracttest.h | 7 +++--- .../CollectionTest/tst_tapecommandline.cpp | 6 +++-- .../tst_valentinacommandline.cpp | 21 +++++++++------- 4 files changed, 34 insertions(+), 24 deletions(-) diff --git a/src/libs/vmisc/abstracttest.cpp b/src/libs/vmisc/abstracttest.cpp index 7982ff711..425ee0579 100644 --- a/src/libs/vmisc/abstracttest.cpp +++ b/src/libs/vmisc/abstracttest.cpp @@ -99,15 +99,14 @@ QString AbstractTest::TranslationsPath() const } //--------------------------------------------------------------------------------------------------------------------- -int AbstractTest::Run(int exit, const QString &program, const QStringList &arguments, int msecs) +int AbstractTest::Run(int exit, const QString &program, const QStringList &arguments, QString &error, int msecs) { const QString parameters = QString("Program: %1 \nArguments: %2.").arg(program).arg(arguments.join(", ")); QFileInfo info(program); if (not info.exists()) { - const QString msg = QString("Can't find binary.\n%1").arg(parameters); - QWARN(qUtf8Printable(msg)); + error = QString("Can't find binary.\n%1").arg(parameters); return TST_EX_BIN; } @@ -115,26 +114,29 @@ int AbstractTest::Run(int exit, const QString &program, const QStringList &argum process->setWorkingDirectory(info.absoluteDir().absolutePath()); process->start(program, arguments); + if (not process->waitForStarted(msecs)) + { + error = QString("The start operation timed out or an error occurred.\n%1").arg(parameters); + process->kill(); + return TST_EX_START_TIME_OUT; + } + if (not process->waitForFinished(msecs)) { - const QString msg = QString("The operation timed out or an error occurred.\n%1").arg(parameters); - QWARN(qUtf8Printable(msg)); + error = QString("The finish operation timed out or an error occurred.\n%1").arg(parameters); process->kill(); - return TST_EX_TIME_OUT; + return TST_EX_FINISH_TIME_OUT; } if (process->exitStatus() == QProcess::CrashExit) { - const QString msg = QString("Program crashed.\n%1\n%2").arg(parameters) - .arg(QString(process->readAllStandardError())); - QWARN(qUtf8Printable(msg)); + error = QString("Program crashed.\n%1\n%2").arg(parameters).arg(QString(process->readAllStandardError())); return TST_EX_CRASH; } if (process->exitCode() != exit) { - const QString msg = QString("Unexpected finish.\n%1").arg(QString(process->readAllStandardError())); - QWARN(qUtf8Printable(msg)); + error = QString("Unexpected finish.\n%1").arg(QString(process->readAllStandardError())); return process->exitCode(); } diff --git a/src/libs/vmisc/abstracttest.h b/src/libs/vmisc/abstracttest.h index dc91c34db..89c4c9538 100644 --- a/src/libs/vmisc/abstracttest.h +++ b/src/libs/vmisc/abstracttest.h @@ -49,8 +49,9 @@ template class QVector; // Return codes for testing run application static const auto V_UNUSED TST_EX_BIN = -1; // Can't find binary. -static const auto V_UNUSED TST_EX_TIME_OUT = -2; // The operation timed out or an error occurred. -static const auto V_UNUSED TST_EX_CRASH = -3; // Program crashed. +static const auto V_UNUSED TST_EX_FINISH_TIME_OUT = -2; // The operation timed out or an error occurred. +static const auto V_UNUSED TST_EX_START_TIME_OUT = -3; // The operation timed out or an error occurred. +static const auto V_UNUSED TST_EX_CRASH = -4; // Program crashed. #undef V_UNUSED @@ -69,7 +70,7 @@ protected: QString TapePath() const; QString TranslationsPath() const; - int Run(int exit, const QString &program, const QStringList &arguments, int msecs = 120000); + int Run(int exit, const QString &program, const QStringList &arguments, QString &error, int msecs = 120000); bool CopyRecursively(const QString &srcFilePath, const QString &tgtFilePath) const; }; diff --git a/src/test/CollectionTest/tst_tapecommandline.cpp b/src/test/CollectionTest/tst_tapecommandline.cpp index 7925cf278..53f616a44 100644 --- a/src/test/CollectionTest/tst_tapecommandline.cpp +++ b/src/test/CollectionTest/tst_tapecommandline.cpp @@ -28,6 +28,7 @@ #include "tst_tapecommandline.h" #include "../vmisc/vsysexits.h" +#include "logging.h" #include @@ -114,11 +115,12 @@ void TST_TapeCommandLine::OpenMeasurements() QFETCH(QString, file); QFETCH(int, exitCode); + QString error; const int exit = Run(exitCode, TapePath(), QStringList() << "--test" << QApplication::applicationDirPath() + QDir::separator() + tmpTestFolder + QDir::separator() + - file); + file, error); - QCOMPARE(exit, exitCode); + QVERIFY2(exit == exitCode, qUtf8Printable(error)); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/test/CollectionTest/tst_valentinacommandline.cpp b/src/test/CollectionTest/tst_valentinacommandline.cpp index 68d32f710..6a1b57be1 100644 --- a/src/test/CollectionTest/tst_valentinacommandline.cpp +++ b/src/test/CollectionTest/tst_valentinacommandline.cpp @@ -28,6 +28,7 @@ #include "tst_valentinacommandline.h" #include "../vmisc/vsysexits.h" +#include "logging.h" #include @@ -102,11 +103,12 @@ void TST_ValentinaCommandLine::OpenPatterns() QFETCH(QString, file); QFETCH(int, exitCode); + QString error; const QString tmp = QApplication::applicationDirPath() + QDir::separator() + tmpTestFolder; const int exit = Run(exitCode, ValentinaPath(), QStringList() << "--test" - << tmp + QDir::separator() + file); + << tmp + QDir::separator() + file, error); - QCOMPARE(exit, exitCode); + QVERIFY2(exit == exitCode, qUtf8Printable(error)); } //--------------------------------------------------------------------------------------------------------------------- @@ -152,12 +154,13 @@ void TST_ValentinaCommandLine::ExportMode() QFETCH(QString, arguments); QFETCH(int, exitCode); + QString error; const QString tmp = QApplication::applicationDirPath() + QDir::separator() + tmpTestFolder; const QStringList arg = QStringList() << tmp + QDir::separator() + file << arguments.split(";;"); - const int exit = Run(exitCode, ValentinaPath(), arg); + const int exit = Run(exitCode, ValentinaPath(), arg, error); - QCOMPARE(exit, exitCode); + QVERIFY2(exit == exitCode, qUtf8Printable(error)); } //--------------------------------------------------------------------------------------------------------------------- @@ -209,12 +212,13 @@ void TST_ValentinaCommandLine::TestMode() QFETCH(QString, arguments); QFETCH(int, exitCode); + QString error; const QString tmp = QApplication::applicationDirPath() + QDir::separator() + tmpTestFolder; const QStringList arg = QStringList() << tmp + QDir::separator() + file << arguments.split(";;"); - const int exit = Run(exitCode, ValentinaPath(), arg); + const int exit = Run(exitCode, ValentinaPath(), arg, error); - QCOMPARE(exit, exitCode); + QVERIFY2(exit == exitCode, qUtf8Printable(error)); } //--------------------------------------------------------------------------------------------------------------------- @@ -269,12 +273,13 @@ void TST_ValentinaCommandLine::TestOpenCollection() QFETCH(QString, arguments); QFETCH(int, exitCode); + QString error; const QString tmp = QApplication::applicationDirPath() + QDir::separator() + tmpTestCollectionFolder; const QStringList arg = QStringList() << tmp + QDir::separator() + file << arguments.split(";;"); - const int exit = Run(exitCode, ValentinaPath(), arg); + const int exit = Run(exitCode, ValentinaPath(), arg, error); - QCOMPARE(exit, exitCode); + QVERIFY2(exit == exitCode, qUtf8Printable(error)); } //--------------------------------------------------------------------------------------------------------------------- From fa67634f383ec1eb10aae35f96e5dcfba37e7f23 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Sat, 3 Dec 2016 10:40:23 +0200 Subject: [PATCH 2/2] Call waitForStarted() before each waitForFinished(). --HG-- branch : develop --- src/app/valentina/dialogs/dialogsavelayout.cpp | 2 +- src/app/valentina/mainwindowsnogui.cpp | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/app/valentina/dialogs/dialogsavelayout.cpp b/src/app/valentina/dialogs/dialogsavelayout.cpp index 6faed5795..c6300a2f3 100644 --- a/src/app/valentina/dialogs/dialogsavelayout.cpp +++ b/src/app/valentina/dialogs/dialogsavelayout.cpp @@ -292,7 +292,7 @@ bool DialogSaveLayout::TestPdf() #else proc.start(PDFTOPS); // Seek pdftops in standard path #endif - if (proc.waitForFinished(15000) || proc.state() == QProcess::NotRunning) + if (proc.waitForStarted(15000) && (proc.waitForFinished(15000) || proc.state() == QProcess::NotRunning)) { res = true; } diff --git a/src/app/valentina/mainwindowsnogui.cpp b/src/app/valentina/mainwindowsnogui.cpp index d02b112fe..2a44100e6 100644 --- a/src/app/valentina/mainwindowsnogui.cpp +++ b/src/app/valentina/mainwindowsnogui.cpp @@ -740,7 +740,10 @@ void MainWindowsNoGUI::PdfToPs(const QStringList ¶ms) const #endif QProcess proc; proc.start(PDFTOPS, params); - proc.waitForFinished(15000); + if (proc.waitForStarted(15000)) + { + proc.waitForFinished(15000); + } #ifndef QT_NO_CURSOR QApplication::restoreOverrideCursor(); #endif