aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorIvan Komissarov <abbapoh@gmail.com>2020-09-26 18:49:26 +0200
committerIvan Komissarov <ABBAPOH@gmail.com>2021-09-20 08:48:39 +0000
commit19090f5ff1681503096e8797159e773600692903 (patch)
treeb34f68e51ef22486fc64d7409d856fd9c486b54d /tests
parentb70bd9531f73382fe7ec1e1c7179d1d7aba92e58 (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')
-rw-r--r--tests/auto/blackbox/testdata/providers-properties/module-providers/provider_a.qbs9
-rw-r--r--tests/auto/blackbox/testdata/providers-properties/module-providers/provider_b.qbs9
-rw-r--r--tests/auto/blackbox/testdata/providers-properties/providers-properties.qbs11
-rw-r--r--tests/auto/blackbox/testdata/qbs-module-providers-cli-override/module-providers/provider_a.qbs8
-rw-r--r--tests/auto/blackbox/testdata/qbs-module-providers-cli-override/module-providers/provider_b.qbs9
-rw-r--r--tests/auto/blackbox/testdata/qbs-module-providers-cli-override/qbs-module-providers-cli-override.qbs13
-rw-r--r--tests/auto/blackbox/testdata/qbs-module-providers-compatibility/module-providers/named_provider.qbs8
-rw-r--r--tests/auto/blackbox/testdata/qbs-module-providers-compatibility/module-providers/qbsmetatestmodule/provider.qbs8
-rw-r--r--tests/auto/blackbox/testdata/qbs-module-providers-compatibility/qbs-module-providers-compatibility.qbs7
-rw-r--r--tests/auto/blackbox/testdata/qbs-module-providers-helpers.js14
-rw-r--r--tests/auto/blackbox/testdata/qbs-module-providers/module-providers/provider_a.qbs8
-rw-r--r--tests/auto/blackbox/testdata/qbs-module-providers/module-providers/provider_b.qbs9
-rw-r--r--tests/auto/blackbox/testdata/qbs-module-providers/qbs-module-providers.qbs28
-rw-r--r--tests/auto/blackbox/tst_blackbox.cpp124
-rw-r--r--tests/auto/blackbox/tst_blackbox.h7
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();