diff options
author | Ivan Komissarov <abbapoh@gmail.com> | 2020-09-26 18:49:26 +0200 |
---|---|---|
committer | Ivan Komissarov <ABBAPOH@gmail.com> | 2021-09-20 08:48:39 +0000 |
commit | 19090f5ff1681503096e8797159e773600692903 (patch) | |
tree | b34f68e51ef22486fc64d7409d856fd9c486b54d /tests | |
parent | b70bd9531f73382fe7ec1e1c7179d1d7aba92e58 (diff) |
Implement qbsModuleProviders property
It is now possible to specify which providers should be run by providing
the list of provider names.
The desired providers can be selected on the Project and Product levels.
Task-number: QBS-1604
Change-Id: Ib0782df00e3086104345f4b740fc1696d715344c
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'tests')
15 files changed, 272 insertions, 0 deletions
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 aabc85441..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; 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(); |