diff options
Diffstat (limited to 'tests/auto/api/tst_api.cpp')
-rw-r--r-- | tests/auto/api/tst_api.cpp | 62 |
1 files changed, 55 insertions, 7 deletions
diff --git a/tests/auto/api/tst_api.cpp b/tests/auto/api/tst_api.cpp index aac0f3e7e..235f2ac04 100644 --- a/tests/auto/api/tst_api.cpp +++ b/tests/auto/api/tst_api.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2019 Jochen Ulrich <jochenulrich@t-online.de> ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qbs. @@ -874,7 +875,7 @@ void TestApi::changeContent() buildJob.reset(project.buildAllProducts(buildOptions, defaultProducts(), this)); errorInfo = project.addGroup(newProjectData.products().front(), "blubb"); QVERIFY(errorInfo.hasError()); - QVERIFY2(errorInfo.toString().contains("in process"), qPrintable(errorInfo.toString())); + QVERIFY2(errorInfo.toString().contains("in progress"), qPrintable(errorInfo.toString())); waitForFinished(buildJob.get()); errorInfo = project.addGroup(newProjectData.products().front(), "blubb"); VERIFY_NO_ERROR(errorInfo); @@ -1555,9 +1556,13 @@ void TestApi::linkStaticAndDynamicLibs() BuildDescriptionReceiver bdr; qbs::BuildOptions options; options.setEchoMode(qbs::CommandEchoModeCommandLine); + m_logSink->output.clear(); const qbs::ErrorInfo errorInfo = doBuildProject("link-staticlibs-dynamiclibs", &bdr, nullptr, nullptr, options); VERIFY_NO_ERROR(errorInfo); + const bool isNormalUnix = m_logSink->output.contains("is normal unix: yes"); + const bool isNotNormalUnix = m_logSink->output.contains("is normal unix: no"); + QVERIFY2(isNormalUnix != isNotNormalUnix, qPrintable(m_logSink->output)); // The dependencies libdynamic1.so and libstatic2.a must not appear in the link command for the // executable. The -rpath-link line for libdynamic1.so must be there. @@ -1574,12 +1579,7 @@ void TestApi::linkStaticAndDynamicLibs() } } QVERIFY(!appLinkCmd.isEmpty()); - std::string targetPlatform = buildProfile.value("qbs.targetPlatform") - .toString().toStdString(); - std::vector<std::string> targetOS = qbs::Internal::HostOsInfo::canonicalOSIdentifiers( - targetPlatform); - if (!qbs::Internal::contains(targetOS, "darwin") - && !qbs::Internal::contains(targetOS, "windows")) { + if (isNormalUnix) { const std::regex rpathLinkRex("-rpath-link=\\S*/" + relativeProductBuildDir("dynamic2").toStdString()); const auto ln = appLinkCmd.toStdString(); @@ -2374,6 +2374,12 @@ void TestApi::projectWithPropertiesItem() VERIFY_NO_ERROR(errorInfo); } +void TestApi::projectWithProbeAndProfileItem() +{ + const qbs::ErrorInfo errorInfo = doBuildProject("project-with-probe-and-profile-item"); + VERIFY_NO_ERROR(errorInfo); +} + void TestApi::propertiesBlocks() { const qbs::ErrorInfo errorInfo = doBuildProject("properties-blocks"); @@ -2829,6 +2835,48 @@ void TestApi::targetArtifactStatus() QCOMPARE(product.targetArtifacts().size(), enableTagging ? 2 : 1); } +void TestApi::timeout() +{ + QFETCH(QString, projectDirName); + const auto setupParams = defaultSetupParameters(projectDirName + "/timeout.qbs"); + std::unique_ptr<qbs::SetupProjectJob> setupJob{ + qbs::Project().setupProject(setupParams, m_logSink, nullptr)}; + waitForFinished(setupJob.get()); + QVERIFY2(!setupJob->error().hasError(), qPrintable(setupJob->error().toString())); + auto project = setupJob->project(); + const auto products = project.projectData().products(); + QList<qbs::ProductData> helperProducts; + qbs::ProductData productUnderTest; + for (const auto &product : products) { + if (!product.type().contains(QLatin1String("product-under-test"))) + helperProducts.append(product); + else + productUnderTest = product; + } + const std::unique_ptr<qbs::BuildJob> buildHelpersJob{ + project.buildSomeProducts(helperProducts, qbs::BuildOptions())}; + QVERIFY(waitForFinished(buildHelpersJob.get(), testTimeoutInMsecs())); + if (buildHelpersJob->error().hasError()) { + qDebug().noquote() << buildHelpersJob->error().toString(); + QFAIL("Could not build helper products"); + } + + const std::unique_ptr<qbs::BuildJob> buildJob(project.buildOneProduct(productUnderTest, + qbs::BuildOptions())); + QVERIFY(waitForFinished(buildJob.get(), testTimeoutInMsecs())); + QVERIFY(buildJob->error().hasError()); + const auto errorString = buildJob->error().toString(); + QVERIFY2(errorString.contains("cancel"), qPrintable(errorString)); + QVERIFY(errorString.contains("timeout")); +} + +void TestApi::timeout_data() +{ + QTest::addColumn<QString>("projectDirName"); + QTest::newRow("JS Command") << QString("timeout-js"); + QTest::newRow("Process Command") << QString("timeout-process"); +} + void TestApi::toolInModule() { QVariantMap overrides({std::make_pair("qbs.installRoot", m_workingDataDir |