diff options
Diffstat (limited to 'tests/auto/api/tst_api.cpp')
-rw-r--r-- | tests/auto/api/tst_api.cpp | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/tests/auto/api/tst_api.cpp b/tests/auto/api/tst_api.cpp index 53064c6ee..aaafd49ce 100644 --- a/tests/auto/api/tst_api.cpp +++ b/tests/auto/api/tst_api.cpp @@ -49,6 +49,7 @@ #include <QScopedPointer> #include <QStringList> #include <QTest> +#include <QTimer> class LogSink: public qbs::ILogSink { @@ -90,11 +91,20 @@ void TestApi::initTestCase() m_workingDataDir, false, &errorMessage), qPrintable(errorMessage)); } -static void waitForFinished(qbs::AbstractJob *job) +static bool waitForFinished(qbs::AbstractJob *job, int timeout = 0) { QEventLoop loop; QObject::connect(job, SIGNAL(finished(bool,qbs::AbstractJob*)), &loop, SLOT(quit())); + if (timeout > 0) { + QTimer timer; + QObject::connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit())); + timer.setSingleShot(true); + timer.start(timeout); + loop.exec(); + return timer.isActive(); // Timer ended the loop <=> job did not finish. + } loop.exec(); + return true; } @@ -419,6 +429,31 @@ void TestApi::fileTagsFilterOverride() QVERIFY(installableFiles.first().targetDirectory().contains("habicht")); } +void TestApi::infiniteLoop() +{ + QFETCH(QString, projectDirName); + qbs::SetupProjectParameters setupParams = defaultSetupParameters(); + const QString projectDir = QDir::cleanPath(m_workingDataDir + '/' + projectDirName); + setupParams.setProjectFilePath(projectDir + "/infinite-loop.qbs"); + setupParams.setBuildRoot(projectDir); + QScopedPointer<qbs::SetupProjectJob> setupJob(qbs::Project::setupProject(setupParams, + m_logSink, 0)); + waitForFinished(setupJob.data()); + QVERIFY2(!setupJob->error().hasError(), qPrintable(setupJob->error().toString())); + qbs::Project project = setupJob->project(); + const QScopedPointer<qbs::BuildJob> buildJob(project.buildAllProducts(qbs::BuildOptions())); + QTimer::singleShot(1000, setupJob.data(), SLOT(cancel())); + QEXPECT_FAIL(0, "QBS-552", Continue); + QVERIFY(waitForFinished(buildJob.data(), 3000)); +} + +void TestApi::infiniteLoop_data() +{ + QTest::addColumn<QString>("projectDirName"); + QTest::newRow("JS Command") << QString("infinite-loop-js"); + QTest::newRow("Process Command") << QString("infinite-loop-process"); +} + void TestApi::installableFiles() { qbs::SetupProjectParameters setupParams = defaultSetupParameters(); |