diff options
Diffstat (limited to 'tests')
17 files changed, 279 insertions, 8 deletions
diff --git a/tests/auto/api/tst_api.cpp b/tests/auto/api/tst_api.cpp index 99b5059a0..200239081 100644 --- a/tests/auto/api/tst_api.cpp +++ b/tests/auto/api/tst_api.cpp @@ -1615,12 +1615,11 @@ void TestApi::listBuildSystemFiles() m_logSink, nullptr)); waitForFinished(job.get()); QVERIFY2(!job->error().hasError(), qPrintable(job->error().toString())); - const auto buildSystemFiles = qbs::Internal::Set<QString>::fromStdSet( - job->project().buildSystemFiles()); - QVERIFY(buildSystemFiles.contains(setupParams.projectFilePath())); - QVERIFY(buildSystemFiles.contains(setupParams.buildRoot() + "/subproject2/subproject2.qbs")); - QVERIFY(buildSystemFiles.contains(setupParams.buildRoot() - + "/subproject2/subproject3/subproject3.qbs")); + const auto buildSystemFiles = job->project().buildSystemFiles(); + QVERIFY(buildSystemFiles.count(setupParams.projectFilePath())); + QVERIFY(buildSystemFiles.count(setupParams.buildRoot() + "/subproject2/subproject2.qbs")); + QVERIFY(buildSystemFiles.count(setupParams.buildRoot() + + "/subproject2/subproject3/subproject3.qbs")); } void TestApi::localProfiles() diff --git a/tests/auto/blackbox/testdata/maximum-cxx-language-version/modules/newestmodule/newestmodule.qbs b/tests/auto/blackbox/testdata/maximum-cxx-language-version/modules/newestmodule/newestmodule.qbs index f99932b10..305cb29f1 100644 --- a/tests/auto/blackbox/testdata/maximum-cxx-language-version/modules/newestmodule/newestmodule.qbs +++ b/tests/auto/blackbox/testdata/maximum-cxx-language-version/modules/newestmodule/newestmodule.qbs @@ -1,4 +1,4 @@ Module { Depends { name: "cpp" } - cpp.cxxLanguageVersion: "c++17" + cpp.cxxLanguageVersion: "c++23" } diff --git a/tests/auto/blackbox/testdata/providers-properties/module-providers/provider_a.qbs b/tests/auto/blackbox/testdata/providers-properties/module-providers/provider_a.qbs new file mode 100644 index 000000000..7985199c1 --- /dev/null +++ b/tests/auto/blackbox/testdata/providers-properties/module-providers/provider_a.qbs @@ -0,0 +1,9 @@ +import "../../qbs-module-providers-helpers.js" as Helpers + +ModuleProvider { + property string someProp: "provider_a" + relativeSearchPaths: { + Helpers.writeModule(outputBaseDir, "qbsmetatestmodule", someProp); + return ""; + } +} diff --git a/tests/auto/blackbox/testdata/providers-properties/module-providers/provider_b.qbs b/tests/auto/blackbox/testdata/providers-properties/module-providers/provider_b.qbs new file mode 100644 index 000000000..58042d8d3 --- /dev/null +++ b/tests/auto/blackbox/testdata/providers-properties/module-providers/provider_b.qbs @@ -0,0 +1,9 @@ +import "../../qbs-module-providers-helpers.js" as Helpers + +ModuleProvider { + property string someProp: "provider_b" + relativeSearchPaths: { + Helpers.writeModule(outputBaseDir, "qbsothermodule", someProp); + return ""; + } +} diff --git a/tests/auto/blackbox/testdata/providers-properties/providers-properties.qbs b/tests/auto/blackbox/testdata/providers-properties/providers-properties.qbs new file mode 100644 index 000000000..e29536c17 --- /dev/null +++ b/tests/auto/blackbox/testdata/providers-properties/providers-properties.qbs @@ -0,0 +1,11 @@ +Product { + qbsModuleProviders: ["provider_a", "provider_b"] + name: "p" + Depends { name: "qbsmetatestmodule" } + Depends { name: "qbsothermodule" } + moduleProviders.provider_a.someProp: "someValue" + property bool dummy: { + console.info("p.qbsmetatestmodule.prop: " + qbsmetatestmodule.prop); + console.info("p.qbsothermodule.prop: " + qbsothermodule.prop); + } +} diff --git a/tests/auto/blackbox/testdata/qbs-module-providers-cli-override/module-providers/provider_a.qbs b/tests/auto/blackbox/testdata/qbs-module-providers-cli-override/module-providers/provider_a.qbs new file mode 100644 index 000000000..d34d1cac5 --- /dev/null +++ b/tests/auto/blackbox/testdata/qbs-module-providers-cli-override/module-providers/provider_a.qbs @@ -0,0 +1,8 @@ +import "../../qbs-module-providers-helpers.js" as Helpers + +ModuleProvider { + relativeSearchPaths: { + Helpers.writeModule(outputBaseDir, "qbsmetatestmodule", "from_provider_a"); + return ""; + } +} diff --git a/tests/auto/blackbox/testdata/qbs-module-providers-cli-override/module-providers/provider_b.qbs b/tests/auto/blackbox/testdata/qbs-module-providers-cli-override/module-providers/provider_b.qbs new file mode 100644 index 000000000..767e30923 --- /dev/null +++ b/tests/auto/blackbox/testdata/qbs-module-providers-cli-override/module-providers/provider_b.qbs @@ -0,0 +1,9 @@ +import "../../qbs-module-providers-helpers.js" as Helpers + +ModuleProvider { + relativeSearchPaths: { + Helpers.writeModule(outputBaseDir, "qbsmetatestmodule", "from_provider_b"); + Helpers.writeModule(outputBaseDir, "qbsothermodule", "from_provider_b"); + return ""; + } +} diff --git a/tests/auto/blackbox/testdata/qbs-module-providers-cli-override/qbs-module-providers-cli-override.qbs b/tests/auto/blackbox/testdata/qbs-module-providers-cli-override/qbs-module-providers-cli-override.qbs new file mode 100644 index 000000000..6f94ab207 --- /dev/null +++ b/tests/auto/blackbox/testdata/qbs-module-providers-cli-override/qbs-module-providers-cli-override.qbs @@ -0,0 +1,13 @@ +Project { + name: "project" + Project { + name: "innerProject" + Product { + name: "product" + Depends { name: "qbsmetatestmodule"; required: false } + property bool dummy: { + console.info("qbsmetatestmodule.prop: " + qbsmetatestmodule.prop); + } + } + } +} diff --git a/tests/auto/blackbox/testdata/qbs-module-providers-compatibility/module-providers/named_provider.qbs b/tests/auto/blackbox/testdata/qbs-module-providers-compatibility/module-providers/named_provider.qbs new file mode 100644 index 000000000..07114b5ef --- /dev/null +++ b/tests/auto/blackbox/testdata/qbs-module-providers-compatibility/module-providers/named_provider.qbs @@ -0,0 +1,8 @@ +import "../../qbs-module-providers-helpers.js" as Helpers + +ModuleProvider { + relativeSearchPaths: { + Helpers.writeModule(outputBaseDir, "qbsmetatestmodule", "from_named_provider"); + return ""; + } +} diff --git a/tests/auto/blackbox/testdata/qbs-module-providers-compatibility/module-providers/qbsmetatestmodule/provider.qbs b/tests/auto/blackbox/testdata/qbs-module-providers-compatibility/module-providers/qbsmetatestmodule/provider.qbs new file mode 100644 index 000000000..b04a52261 --- /dev/null +++ b/tests/auto/blackbox/testdata/qbs-module-providers-compatibility/module-providers/qbsmetatestmodule/provider.qbs @@ -0,0 +1,8 @@ +import "../../../qbs-module-providers-helpers.js" as Helpers + +ModuleProvider { + relativeSearchPaths: { + Helpers.writeModule(outputBaseDir, "qbsmetatestmodule", "from_scoped_provider"); + return ""; + } +} diff --git a/tests/auto/blackbox/testdata/qbs-module-providers-compatibility/qbs-module-providers-compatibility.qbs b/tests/auto/blackbox/testdata/qbs-module-providers-compatibility/qbs-module-providers-compatibility.qbs new file mode 100644 index 000000000..7885b540a --- /dev/null +++ b/tests/auto/blackbox/testdata/qbs-module-providers-compatibility/qbs-module-providers-compatibility.qbs @@ -0,0 +1,7 @@ +Product { + name: "p" + Depends { name: "qbsmetatestmodule" } + property bool dummy: { + console.info("qbsmetatestmodule.prop: " + qbsmetatestmodule.prop); + } +} diff --git a/tests/auto/blackbox/testdata/qbs-module-providers-helpers.js b/tests/auto/blackbox/testdata/qbs-module-providers-helpers.js new file mode 100644 index 000000000..2a2acfdcb --- /dev/null +++ b/tests/auto/blackbox/testdata/qbs-module-providers-helpers.js @@ -0,0 +1,14 @@ +var File = require("qbs.File"); +var FileInfo = require("qbs.FileInfo"); +var TextFile = require("qbs.TextFile"); + +function writeModule(outputBaseDir, name, prop) { + console.info("Running setup script for " + name); + var moduleDir = FileInfo.joinPaths(outputBaseDir, "modules", name); + File.makePath(moduleDir); + var module = new TextFile(FileInfo.joinPaths(moduleDir, "module.qbs"), TextFile.WriteOnly); + module.writeLine("Module {"); + module.writeLine(" property string prop: '" + prop + "'"); + module.writeLine("}"); + module.close(); +} diff --git a/tests/auto/blackbox/testdata/qbs-module-providers/module-providers/provider_a.qbs b/tests/auto/blackbox/testdata/qbs-module-providers/module-providers/provider_a.qbs new file mode 100644 index 000000000..d34d1cac5 --- /dev/null +++ b/tests/auto/blackbox/testdata/qbs-module-providers/module-providers/provider_a.qbs @@ -0,0 +1,8 @@ +import "../../qbs-module-providers-helpers.js" as Helpers + +ModuleProvider { + relativeSearchPaths: { + Helpers.writeModule(outputBaseDir, "qbsmetatestmodule", "from_provider_a"); + return ""; + } +} diff --git a/tests/auto/blackbox/testdata/qbs-module-providers/module-providers/provider_b.qbs b/tests/auto/blackbox/testdata/qbs-module-providers/module-providers/provider_b.qbs new file mode 100644 index 000000000..767e30923 --- /dev/null +++ b/tests/auto/blackbox/testdata/qbs-module-providers/module-providers/provider_b.qbs @@ -0,0 +1,9 @@ +import "../../qbs-module-providers-helpers.js" as Helpers + +ModuleProvider { + relativeSearchPaths: { + Helpers.writeModule(outputBaseDir, "qbsmetatestmodule", "from_provider_b"); + Helpers.writeModule(outputBaseDir, "qbsothermodule", "from_provider_b"); + return ""; + } +} diff --git a/tests/auto/blackbox/testdata/qbs-module-providers/qbs-module-providers.qbs b/tests/auto/blackbox/testdata/qbs-module-providers/qbs-module-providers.qbs new file mode 100644 index 000000000..00776a62e --- /dev/null +++ b/tests/auto/blackbox/testdata/qbs-module-providers/qbs-module-providers.qbs @@ -0,0 +1,28 @@ +Project { + qbsModuleProviders: "provider_a" + property stringList wantedProviders: qbsModuleProviders + name: "project" + Project { + name: "innerProject" + qbsModuleProviders: project.wantedProviders + Product { + name: "p1" + Depends { name: "qbsmetatestmodule" } + Depends { name: "qbsothermodule"; required: false } + property bool dummy: { + console.info("p1.qbsmetatestmodule.prop: " + qbsmetatestmodule.prop); + console.info("p1.qbsothermodule.prop: " + qbsothermodule.prop); + } + } + } + + Product { + name: "p2" + Depends { name: "qbsmetatestmodule" } + Depends { name: "qbsothermodule"; required: false } + property bool dummy: { + console.info("p2.qbsmetatestmodule.prop: " + qbsmetatestmodule.prop); + console.info("p2.qbsothermodule.prop: " + qbsothermodule.prop); + } + } +} diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp index 1082ba595..75dec843b 100644 --- a/tests/auto/blackbox/tst_blackbox.cpp +++ b/tests/auto/blackbox/tst_blackbox.cpp @@ -5846,6 +5846,18 @@ void TestBlackbox::protobufLibraryInstall() QFileInfo::exists(installRootInclude + "/hello/world.pb.h")); } +// Tests whether it is possible to set providers properties in a Product or from command-line +void TestBlackbox::providersProperties() +{ + QDir::setCurrent(testDataDir + "/providers-properties"); + + QbsRunParameters params("build"); + params.arguments = QStringList("moduleProviders.provider_b.someProp: \"otherValue\""); + QCOMPARE(runQbs(params), 0); + QVERIFY2(m_qbsStdout.contains("p.qbsmetatestmodule.prop: someValue"), m_qbsStdout); + QVERIFY2(m_qbsStdout.contains("p.qbsothermodule.prop: otherValue"), m_qbsStdout); +} + void TestBlackbox::pseudoMultiplexing() { // This is "pseudo-multiplexing" on all platforms that initialize qbs.architectures @@ -6019,6 +6031,118 @@ void TestBlackbox::qbsConfigAddProfile_data() << QString("Profile properties must be key/value pairs"); } +// Tests whether it is possible to set qbsModuleProviders in Product and Project items +// and that the order of providers results in correct priority +void TestBlackbox::qbsModuleProviders() +{ + QFETCH(QStringList, arguments); + QFETCH(QString, firstProp); + QFETCH(QString, secondProp); + + QDir::setCurrent(testDataDir + "/qbs-module-providers"); + + QbsRunParameters params("resolve"); + params.arguments = arguments; + QCOMPARE(runQbs(params), 0); + QVERIFY2(m_qbsStdout.contains(("p1.qbsmetatestmodule.prop: " + firstProp).toUtf8()), + m_qbsStdout); + QVERIFY2(m_qbsStdout.contains(("p1.qbsothermodule.prop: " + secondProp).toUtf8()), + m_qbsStdout); + QVERIFY2(m_qbsStdout.contains(("p2.qbsmetatestmodule.prop: " + firstProp).toUtf8()), + m_qbsStdout); + QVERIFY2(m_qbsStdout.contains(("p2.qbsothermodule.prop: " + secondProp).toUtf8()), + m_qbsStdout); +} + +void TestBlackbox::qbsModuleProviders_data() +{ + QTest::addColumn<QStringList>("arguments"); + QTest::addColumn<QString>("firstProp"); + QTest::addColumn<QString>("secondProp"); + + QTest::newRow("default") << QStringList() << "from_provider_a" << "undefined"; + QTest::newRow("override") + << QStringList("projects.project.qbsModuleProviders:provider_b") + << "from_provider_b" + << "from_provider_b"; + QTest::newRow("override list a") + << QStringList("projects.project.qbsModuleProviders:provider_a,provider_b") + << "from_provider_a" + << "from_provider_b"; + QTest::newRow("override list b") + << QStringList("projects.project.qbsModuleProviders:provider_b,provider_a") + << "from_provider_b" + << "from_provider_b"; +} + +// Tests possible use-cases how to override providers from command-line +void TestBlackbox::qbsModuleProvidersCliOverride() +{ + QFETCH(QStringList, arguments); + QFETCH(QString, propertyValue); + + QDir::setCurrent(testDataDir + "/qbs-module-providers-cli-override"); + + QbsRunParameters params("resolve"); + params.arguments = arguments; + QCOMPARE(runQbs(params), 0); + QVERIFY2(m_qbsStdout.contains(("qbsmetatestmodule.prop: " + propertyValue).toUtf8()), + m_qbsStdout); +} + +void TestBlackbox::qbsModuleProvidersCliOverride_data() +{ + QTest::addColumn<QStringList>("arguments"); + QTest::addColumn<QString>("propertyValue"); + + QTest::newRow("default") << QStringList() << "undefined"; + QTest::newRow("project-wide") + << QStringList("project.qbsModuleProviders:provider_a") + << "from_provider_a"; + QTest::newRow("concrete project") + << QStringList("projects.innerProject.qbsModuleProviders:provider_a") + << "from_provider_a"; + QTest::newRow("concrete product") + << QStringList("products.product.qbsModuleProviders:provider_a") + << "from_provider_a"; + QTest::newRow("concrete project override project-wide") + << QStringList({ + "project.qbsModuleProviders:provider_a", + "projects.innerProject.qbsModuleProviders:provider_b"}) + << "from_provider_b"; + QTest::newRow("concrete product override project-wide") + << QStringList({ + "project.qbsModuleProviders:provider_a", + "products.product.qbsModuleProviders:provider_b"}) + << "from_provider_b"; +} + +// Tests whether scoped providers can be used as named, i.e. new provider machinery +// is compatible with the old one +void TestBlackbox::qbsModuleProvidersCompatibility() +{ + QFETCH(QStringList, arguments); + QFETCH(QString, propertyValue); + + QDir::setCurrent(testDataDir + "/qbs-module-providers-compatibility"); + + QbsRunParameters params("resolve"); + params.arguments = arguments; + QCOMPARE(runQbs(params), 0); + QVERIFY2(m_qbsStdout.contains(("qbsmetatestmodule.prop: " + propertyValue).toUtf8()), + m_qbsStdout); +} + +void TestBlackbox::qbsModuleProvidersCompatibility_data() +{ + QTest::addColumn<QStringList>("arguments"); + QTest::addColumn<QString>("propertyValue"); + + QTest::newRow("default") << QStringList() << "from_scoped_provider"; + QTest::newRow("scoped by name") << QStringList("project.qbsModuleProviders:qbsmetatestmodule") << "from_scoped_provider"; + QTest::newRow("named") << QStringList("project.qbsModuleProviders:named_provider") << "from_named_provider"; +} + static QJsonObject getNextSessionPacket(QProcess &session, QByteArray &data) { int totalSize = -1; @@ -7706,7 +7830,7 @@ void TestBlackbox::maximumCxxLanguageVersion() QCOMPARE(runQbs(QbsRunParameters("resolve", QStringList("products.app.enableNewestModule:true"))), 0); QCOMPARE(runQbs(QStringList({"--command-echo-mode", "command-line", "-n"})), 0); - QVERIFY2(m_qbsStdout.contains("c++17") || m_qbsStdout.contains("c++1z") + QVERIFY2(m_qbsStdout.contains("c++23") || m_qbsStdout.contains("c++2b") || m_qbsStdout.contains("c++latest"), m_qbsStdout.constData()); QCOMPARE(runQbs(QbsRunParameters("resolve", QStringList("products.app.enableNewestModule:false"))), 0); diff --git a/tests/auto/blackbox/tst_blackbox.h b/tests/auto/blackbox/tst_blackbox.h index 6395eb679..8728f2b10 100644 --- a/tests/auto/blackbox/tst_blackbox.h +++ b/tests/auto/blackbox/tst_blackbox.h @@ -254,10 +254,17 @@ private slots: void protobuf_data(); void protobuf(); void protobufLibraryInstall(); + void providersProperties(); void pseudoMultiplexing(); void qbsConfig(); void qbsConfigAddProfile(); void qbsConfigAddProfile_data(); + void qbsModuleProviders(); + void qbsModuleProviders_data(); + void qbsModuleProvidersCliOverride(); + void qbsModuleProvidersCliOverride_data(); + void qbsModuleProvidersCompatibility(); + void qbsModuleProvidersCompatibility_data(); void qbsSession(); void qbsVersion(); void qtBug51237(); |