From 53a476fbcd9601f5cab5329c385f6c39a82ff038 Mon Sep 17 00:00:00 2001 From: Ivan Komissarov Date: Sun, 23 Apr 2023 15:36:17 +0500 Subject: Move providers tests to a dedicated test suite We have quite a few test cases and will probably have more for new providers and/or Packages. Change-Id: Ia3685b47b6a533020f1696827381e8d48fa8c4d1 Reviewed-by: Christian Kandeler --- tests/auto/auto.qbs | 1 + tests/auto/blackbox/CMakeLists.txt | 8 + tests/auto/blackbox/blackbox-providers.qbs | 21 ++ .../fallback-module-provider.qbs | 8 + .../libdir/qbsmetatestmodule.pc | 5 + .../fallback-module-provider/main.cpp | 5 + .../module-providers-cache.qbs | 11 + .../module-providers/provider_a.qbs | 9 + .../testdata-providers/module-providers/main.cpp | 8 + .../module-providers/module-providers.qbs | 35 ++ .../module-providers/mygenerator/provider.qbs | 31 ++ .../module-providers/othergenerator/provider.qbs | 19 ++ .../module-providers/provider_a.qbs | 16 + .../probe-in-module-provider.qbs | 8 + .../module-providers/provider_a.qbs | 9 + .../module-providers/provider_b.qbs | 9 + .../providers-properties/providers-properties.qbs | 12 + .../module-providers/provider_a.qbs | 9 + .../qbs-module-properties-in-providers.qbs | 34 ++ .../module-providers/provider_a.qbs | 8 + .../module-providers/provider_b.qbs | 9 + .../qbs-module-providers-cli-override.qbs | 13 + .../module-providers/named_provider.qbs | 8 + .../qbsmetatestmodule/provider.qbs | 8 + .../qbs-module-providers-compatibility.qbs | 7 + .../qbs-module-providers-helpers.js | 23 ++ .../module-providers/provider_a.qbs | 8 + .../module-providers/provider_b.qbs | 9 + .../qbs-module-providers/qbs-module-providers.qbs | 28 ++ .../qbspkgconfig-module-provider/libs/libA.cpp | 14 + .../qbspkgconfig-module-provider/libs/libA.h | 21 ++ .../qbspkgconfig-module-provider/libs/libs.qbs | 42 +++ .../qbspkgconfig-module-provider/main.cpp | 11 + .../qbspkgconfig-module-provider.qbs | 6 + .../fallback-module-provider.qbs | 8 - .../libdir/qbsmetatestmodule.pc | 5 - .../testdata/fallback-module-provider/main.cpp | 5 - .../module-providers-cache.qbs | 11 - .../module-providers/provider_a.qbs | 9 - .../blackbox/testdata/module-providers/main.cpp | 8 - .../testdata/module-providers/module-providers.qbs | 35 -- .../module-providers/mygenerator/provider.qbs | 31 -- .../module-providers/othergenerator/provider.qbs | 19 -- .../module-providers/provider_a.qbs | 16 - .../probe-in-module-provider.qbs | 8 - .../module-providers/provider_a.qbs | 9 - .../module-providers/provider_b.qbs | 9 - .../providers-properties/providers-properties.qbs | 12 - .../module-providers/provider_a.qbs | 9 - .../qbs-module-properties-in-providers.qbs | 34 -- .../module-providers/provider_a.qbs | 8 - .../module-providers/provider_b.qbs | 9 - .../qbs-module-providers-cli-override.qbs | 13 - .../module-providers/named_provider.qbs | 8 - .../qbsmetatestmodule/provider.qbs | 8 - .../qbs-module-providers-compatibility.qbs | 7 - .../testdata/qbs-module-providers-helpers.js | 23 -- .../module-providers/provider_a.qbs | 8 - .../module-providers/provider_b.qbs | 9 - .../qbs-module-providers/qbs-module-providers.qbs | 28 -- .../qbspkgconfig-module-provider/libs/libA.cpp | 14 - .../qbspkgconfig-module-provider/libs/libA.h | 21 -- .../qbspkgconfig-module-provider/libs/libs.qbs | 42 --- .../testdata/qbspkgconfig-module-provider/main.cpp | 11 - .../qbspkgconfig-module-provider.qbs | 6 - tests/auto/blackbox/tst_blackbox.cpp | 316 ------------------ tests/auto/blackbox/tst_blackbox.h | 14 - tests/auto/blackbox/tst_blackboxproviders.cpp | 368 +++++++++++++++++++++ tests/auto/blackbox/tst_blackboxproviders.h | 60 ++++ 69 files changed, 901 insertions(+), 773 deletions(-) create mode 100644 tests/auto/blackbox/blackbox-providers.qbs create mode 100644 tests/auto/blackbox/testdata-providers/fallback-module-provider/fallback-module-provider.qbs create mode 100644 tests/auto/blackbox/testdata-providers/fallback-module-provider/libdir/qbsmetatestmodule.pc create mode 100644 tests/auto/blackbox/testdata-providers/fallback-module-provider/main.cpp create mode 100644 tests/auto/blackbox/testdata-providers/module-providers-cache/module-providers-cache.qbs create mode 100644 tests/auto/blackbox/testdata-providers/module-providers-cache/module-providers/provider_a.qbs create mode 100644 tests/auto/blackbox/testdata-providers/module-providers/main.cpp create mode 100644 tests/auto/blackbox/testdata-providers/module-providers/module-providers.qbs create mode 100644 tests/auto/blackbox/testdata-providers/module-providers/module-providers/mygenerator/provider.qbs create mode 100644 tests/auto/blackbox/testdata-providers/module-providers/module-providers/othergenerator/provider.qbs create mode 100644 tests/auto/blackbox/testdata-providers/probe-in-module-provider/module-providers/provider_a.qbs create mode 100644 tests/auto/blackbox/testdata-providers/probe-in-module-provider/probe-in-module-provider.qbs create mode 100644 tests/auto/blackbox/testdata-providers/providers-properties/module-providers/provider_a.qbs create mode 100644 tests/auto/blackbox/testdata-providers/providers-properties/module-providers/provider_b.qbs create mode 100644 tests/auto/blackbox/testdata-providers/providers-properties/providers-properties.qbs create mode 100644 tests/auto/blackbox/testdata-providers/qbs-module-properties-in-providers/module-providers/provider_a.qbs create mode 100644 tests/auto/blackbox/testdata-providers/qbs-module-properties-in-providers/qbs-module-properties-in-providers.qbs create mode 100644 tests/auto/blackbox/testdata-providers/qbs-module-providers-cli-override/module-providers/provider_a.qbs create mode 100644 tests/auto/blackbox/testdata-providers/qbs-module-providers-cli-override/module-providers/provider_b.qbs create mode 100644 tests/auto/blackbox/testdata-providers/qbs-module-providers-cli-override/qbs-module-providers-cli-override.qbs create mode 100644 tests/auto/blackbox/testdata-providers/qbs-module-providers-compatibility/module-providers/named_provider.qbs create mode 100644 tests/auto/blackbox/testdata-providers/qbs-module-providers-compatibility/module-providers/qbsmetatestmodule/provider.qbs create mode 100644 tests/auto/blackbox/testdata-providers/qbs-module-providers-compatibility/qbs-module-providers-compatibility.qbs create mode 100644 tests/auto/blackbox/testdata-providers/qbs-module-providers-helpers.js create mode 100644 tests/auto/blackbox/testdata-providers/qbs-module-providers/module-providers/provider_a.qbs create mode 100644 tests/auto/blackbox/testdata-providers/qbs-module-providers/module-providers/provider_b.qbs create mode 100644 tests/auto/blackbox/testdata-providers/qbs-module-providers/qbs-module-providers.qbs create mode 100644 tests/auto/blackbox/testdata-providers/qbspkgconfig-module-provider/libs/libA.cpp create mode 100644 tests/auto/blackbox/testdata-providers/qbspkgconfig-module-provider/libs/libA.h create mode 100644 tests/auto/blackbox/testdata-providers/qbspkgconfig-module-provider/libs/libs.qbs create mode 100644 tests/auto/blackbox/testdata-providers/qbspkgconfig-module-provider/main.cpp create mode 100644 tests/auto/blackbox/testdata-providers/qbspkgconfig-module-provider/qbspkgconfig-module-provider.qbs delete mode 100644 tests/auto/blackbox/testdata/fallback-module-provider/fallback-module-provider.qbs delete mode 100644 tests/auto/blackbox/testdata/fallback-module-provider/libdir/qbsmetatestmodule.pc delete mode 100644 tests/auto/blackbox/testdata/fallback-module-provider/main.cpp delete mode 100644 tests/auto/blackbox/testdata/module-providers-cache/module-providers-cache.qbs delete mode 100644 tests/auto/blackbox/testdata/module-providers-cache/module-providers/provider_a.qbs delete mode 100644 tests/auto/blackbox/testdata/module-providers/main.cpp delete mode 100644 tests/auto/blackbox/testdata/module-providers/module-providers.qbs delete mode 100644 tests/auto/blackbox/testdata/module-providers/module-providers/mygenerator/provider.qbs delete mode 100644 tests/auto/blackbox/testdata/module-providers/module-providers/othergenerator/provider.qbs delete mode 100644 tests/auto/blackbox/testdata/probe-in-module-provider/module-providers/provider_a.qbs delete mode 100644 tests/auto/blackbox/testdata/probe-in-module-provider/probe-in-module-provider.qbs delete mode 100644 tests/auto/blackbox/testdata/providers-properties/module-providers/provider_a.qbs delete mode 100644 tests/auto/blackbox/testdata/providers-properties/module-providers/provider_b.qbs delete mode 100644 tests/auto/blackbox/testdata/providers-properties/providers-properties.qbs delete mode 100644 tests/auto/blackbox/testdata/qbs-module-properties-in-providers/module-providers/provider_a.qbs delete mode 100644 tests/auto/blackbox/testdata/qbs-module-properties-in-providers/qbs-module-properties-in-providers.qbs delete mode 100644 tests/auto/blackbox/testdata/qbs-module-providers-cli-override/module-providers/provider_a.qbs delete mode 100644 tests/auto/blackbox/testdata/qbs-module-providers-cli-override/module-providers/provider_b.qbs delete mode 100644 tests/auto/blackbox/testdata/qbs-module-providers-cli-override/qbs-module-providers-cli-override.qbs delete mode 100644 tests/auto/blackbox/testdata/qbs-module-providers-compatibility/module-providers/named_provider.qbs delete mode 100644 tests/auto/blackbox/testdata/qbs-module-providers-compatibility/module-providers/qbsmetatestmodule/provider.qbs delete mode 100644 tests/auto/blackbox/testdata/qbs-module-providers-compatibility/qbs-module-providers-compatibility.qbs delete mode 100644 tests/auto/blackbox/testdata/qbs-module-providers-helpers.js delete mode 100644 tests/auto/blackbox/testdata/qbs-module-providers/module-providers/provider_a.qbs delete mode 100644 tests/auto/blackbox/testdata/qbs-module-providers/module-providers/provider_b.qbs delete mode 100644 tests/auto/blackbox/testdata/qbs-module-providers/qbs-module-providers.qbs delete mode 100644 tests/auto/blackbox/testdata/qbspkgconfig-module-provider/libs/libA.cpp delete mode 100644 tests/auto/blackbox/testdata/qbspkgconfig-module-provider/libs/libA.h delete mode 100644 tests/auto/blackbox/testdata/qbspkgconfig-module-provider/libs/libs.qbs delete mode 100644 tests/auto/blackbox/testdata/qbspkgconfig-module-provider/main.cpp delete mode 100644 tests/auto/blackbox/testdata/qbspkgconfig-module-provider/qbspkgconfig-module-provider.qbs create mode 100644 tests/auto/blackbox/tst_blackboxproviders.cpp create mode 100644 tests/auto/blackbox/tst_blackboxproviders.h diff --git a/tests/auto/auto.qbs b/tests/auto/auto.qbs index a4c4beedd..bf6b3d219 100644 --- a/tests/auto/auto.qbs +++ b/tests/auto/auto.qbs @@ -9,6 +9,7 @@ Project { "blackbox/blackbox-examples.qbs", "blackbox/blackbox-java.qbs", "blackbox/blackbox-joblimits.qbs", + "blackbox/blackbox-providers.qbs", "blackbox/blackbox-qt.qbs", "blackbox/blackbox-windows.qbs", "blackbox/blackbox.qbs", diff --git a/tests/auto/blackbox/CMakeLists.txt b/tests/auto/blackbox/CMakeLists.txt index 5b5376064..1d90ec95b 100644 --- a/tests/auto/blackbox/CMakeLists.txt +++ b/tests/auto/blackbox/CMakeLists.txt @@ -63,6 +63,14 @@ add_qbs_test(blackbox-joblimits tst_blackboxjoblimits.cpp ) +add_qbs_test(blackbox-providers + SOURCES + ../shared.h + tst_blackboxbase.cpp + tst_blackboxbase.h + tst_blackboxproviders.cpp + ) + add_qbs_test(blackbox-qt SOURCES ../shared.h diff --git a/tests/auto/blackbox/blackbox-providers.qbs b/tests/auto/blackbox/blackbox-providers.qbs new file mode 100644 index 000000000..95ebaa423 --- /dev/null +++ b/tests/auto/blackbox/blackbox-providers.qbs @@ -0,0 +1,21 @@ +import qbs.Utilities + +QbsAutotest { + testName: "blackbox-providers" + Depends { name: "qbs_app" } + Depends { name: "qbs-setup-toolchains" } + Group { + name: "testdata" + prefix: "testdata-providers/" + files: ["**/*"] + fileTags: [] + } + files: [ + "../shared.h", + "tst_blackboxbase.cpp", + "tst_blackboxbase.h", + "tst_blackboxproviders.cpp", + "tst_blackboxproviders.h", + ] + cpp.defines: base.concat(["SRCDIR=" + Utilities.cStringQuote(path)]) +} diff --git a/tests/auto/blackbox/testdata-providers/fallback-module-provider/fallback-module-provider.qbs b/tests/auto/blackbox/testdata-providers/fallback-module-provider/fallback-module-provider.qbs new file mode 100644 index 000000000..a798e15b3 --- /dev/null +++ b/tests/auto/blackbox/testdata-providers/fallback-module-provider/fallback-module-provider.qbs @@ -0,0 +1,8 @@ +CppApplication { + name: "p" + property bool fallbacksEnabled + Depends { name: "pkgconfig"; required: false } + Depends { name: "qbsmetatestmodule"; required: false; enableFallback: fallbacksEnabled } + property bool dummy: { console.info("pkg-config present: " + pkgconfig.present); } + files: "main.cpp" +} diff --git a/tests/auto/blackbox/testdata-providers/fallback-module-provider/libdir/qbsmetatestmodule.pc b/tests/auto/blackbox/testdata-providers/fallback-module-provider/libdir/qbsmetatestmodule.pc new file mode 100644 index 000000000..ae4daba89 --- /dev/null +++ b/tests/auto/blackbox/testdata-providers/fallback-module-provider/libdir/qbsmetatestmodule.pc @@ -0,0 +1,5 @@ +Name: qbsmetatestmodule +Description: just a test +Version: 0.0.1 + +Cflags: -DTHE_MAGIC_DEFINE diff --git a/tests/auto/blackbox/testdata-providers/fallback-module-provider/main.cpp b/tests/auto/blackbox/testdata-providers/fallback-module-provider/main.cpp new file mode 100644 index 000000000..442b755bf --- /dev/null +++ b/tests/auto/blackbox/testdata-providers/fallback-module-provider/main.cpp @@ -0,0 +1,5 @@ +#ifndef THE_MAGIC_DEFINE +#error "missing the magic define" +#endif + +int main() {} diff --git a/tests/auto/blackbox/testdata-providers/module-providers-cache/module-providers-cache.qbs b/tests/auto/blackbox/testdata-providers/module-providers-cache/module-providers-cache.qbs new file mode 100644 index 000000000..508ed84d2 --- /dev/null +++ b/tests/auto/blackbox/testdata-providers/module-providers-cache/module-providers-cache.qbs @@ -0,0 +1,11 @@ +Project { + qbsModuleProviders: ["provider_a"] + name: "project" + property string dummyProp + + Product { + name: "p1" + Depends { name: "qbsothermodule" } + Depends { name: "qbsmetatestmodule" } + } +} diff --git a/tests/auto/blackbox/testdata-providers/module-providers-cache/module-providers/provider_a.qbs b/tests/auto/blackbox/testdata-providers/module-providers-cache/module-providers/provider_a.qbs new file mode 100644 index 000000000..782cf7d25 --- /dev/null +++ b/tests/auto/blackbox/testdata-providers/module-providers-cache/module-providers/provider_a.qbs @@ -0,0 +1,9 @@ +import "../../qbs-module-providers-helpers.js" as Helpers + +ModuleProvider { + relativeSearchPaths: { + Helpers.writeModule(outputBaseDir, "qbsmetatestmodule", "from_provider_a"); + Helpers.writeModule(outputBaseDir, "qbsothermodule", "from_provider_a"); + return ""; + } +} diff --git a/tests/auto/blackbox/testdata-providers/module-providers/main.cpp b/tests/auto/blackbox/testdata-providers/module-providers/main.cpp new file mode 100644 index 000000000..85a4f551c --- /dev/null +++ b/tests/auto/blackbox/testdata-providers/module-providers/main.cpp @@ -0,0 +1,8 @@ +#include + +int main() +{ + std::cout << "The letters are " << LETTER1 << " and " << LETTER2 << std::endl; + std::cout << "The MY_DEFINE is " << MY_DEFINE << std::endl; + return 0; +} diff --git a/tests/auto/blackbox/testdata-providers/module-providers/module-providers.qbs b/tests/auto/blackbox/testdata-providers/module-providers/module-providers.qbs new file mode 100644 index 000000000..e83c80bb1 --- /dev/null +++ b/tests/auto/blackbox/testdata-providers/module-providers/module-providers.qbs @@ -0,0 +1,35 @@ +import qbs.Host + +Project { + property bool enabled: { + var result = qbs.targetPlatform === Host.platform(); + if (!result) + console.info("targetPlatform differs from hostPlatform"); + return result; + } + readonly property string beginning: "beginning" + CppApplication { + name: "app1" + Depends { name: "mygenerator.module1" } + Depends { name: "mygenerator.module2" } + Depends { name: "othergenerator" } + moduleProviders.mygenerator.chooseLettersFrom: project.beginning + moduleProviders.othergenerator.someDefines: name + files: "main.cpp" + } + CppApplication { + readonly property string end: "end" + name: "app2" + Depends { name: "mygenerator.module1" } + Depends { name: "mygenerator.module2" } + Depends { name: "othergenerator" } + Profile { + name: "myProfile" + baseProfile: project.profile + moduleProviders.mygenerator.chooseLettersFrom: product.end + moduleProviders.othergenerator.someDefines: "app2" + } + qbs.profile: "myProfile" + files: "main.cpp" + } +} diff --git a/tests/auto/blackbox/testdata-providers/module-providers/module-providers/mygenerator/provider.qbs b/tests/auto/blackbox/testdata-providers/module-providers/module-providers/mygenerator/provider.qbs new file mode 100644 index 000000000..dae02c03a --- /dev/null +++ b/tests/auto/blackbox/testdata-providers/module-providers/module-providers/mygenerator/provider.qbs @@ -0,0 +1,31 @@ +import qbs.File; +import qbs.FileInfo; +import qbs.TextFile; + +ModuleProvider { + property string chooseLettersFrom + relativeSearchPaths: { + console.info("Running setup script for " + name); + var startAtBeginning = chooseLettersFrom === "beginning"; + var moduleBaseDir = FileInfo.joinPaths(outputBaseDir, "modules", "mygenerator"); + var module1Dir = FileInfo.joinPaths(moduleBaseDir, "module1"); + File.makePath(module1Dir); + var module1 = new TextFile(FileInfo.joinPaths(module1Dir, "module1.qbs"), TextFile.WriteOnly); + module1.writeLine("Module {"); + module1.writeLine(" Depends { name: 'cpp' }"); + module1.writeLine(" cpp.defines: 'LETTER1=" + (startAtBeginning ? "\\\'A\\\'" : "\\\'Z\\\'") + + "'"); + module1.writeLine("}"); + module1.close(); + var module2Dir = FileInfo.joinPaths(moduleBaseDir, "module2"); + File.makePath(module2Dir); + var module2 = new TextFile(FileInfo.joinPaths(module2Dir, "module2.qbs"), TextFile.WriteOnly); + module2.writeLine("Module {"); + module2.writeLine(" Depends { name: 'cpp' }"); + module2.writeLine(" cpp.defines: 'LETTER2=" + (startAtBeginning ? "\\\'B\\\'" : "\\\'Y\\\'") + + "'"); + module2.writeLine("}"); + module2.close(); + return ""; + } +} diff --git a/tests/auto/blackbox/testdata-providers/module-providers/module-providers/othergenerator/provider.qbs b/tests/auto/blackbox/testdata-providers/module-providers/module-providers/othergenerator/provider.qbs new file mode 100644 index 000000000..66557037c --- /dev/null +++ b/tests/auto/blackbox/testdata-providers/module-providers/module-providers/othergenerator/provider.qbs @@ -0,0 +1,19 @@ +import qbs.File; +import qbs.FileInfo; +import qbs.TextFile; + +ModuleProvider { + property string someDefines + relativeSearchPaths: { + console.info("Running setup script for " + name); + var moduleDir = FileInfo.joinPaths(outputBaseDir, "modules", "othergenerator"); + File.makePath(moduleDir); + var module = new TextFile(FileInfo.joinPaths(moduleDir, "module.qbs"), TextFile.WriteOnly); + module.writeLine("Module {"); + module.writeLine(" Depends { name: 'cpp' }"); + module.writeLine(" cpp.defines: 'MY_DEFINE=\"" + someDefines + "\"'"); + module.writeLine("}"); + module.close(); + return ""; + } +} diff --git a/tests/auto/blackbox/testdata-providers/probe-in-module-provider/module-providers/provider_a.qbs b/tests/auto/blackbox/testdata-providers/probe-in-module-provider/module-providers/provider_a.qbs new file mode 100644 index 000000000..8a7c7d6ed --- /dev/null +++ b/tests/auto/blackbox/testdata-providers/probe-in-module-provider/module-providers/provider_a.qbs @@ -0,0 +1,16 @@ +import "../../qbs-module-providers-helpers.js" as Helpers + +ModuleProvider { + Probe { + id: theProbe + configure: { + console.info("Running probe"); + found = true; + } + } + property bool found: theProbe.found + relativeSearchPaths: { + Helpers.writeModule(outputBaseDir, "qbsmetatestmodule", undefined, undefined, found); + return ""; + } +} diff --git a/tests/auto/blackbox/testdata-providers/probe-in-module-provider/probe-in-module-provider.qbs b/tests/auto/blackbox/testdata-providers/probe-in-module-provider/probe-in-module-provider.qbs new file mode 100644 index 000000000..cb346beeb --- /dev/null +++ b/tests/auto/blackbox/testdata-providers/probe-in-module-provider/probe-in-module-provider.qbs @@ -0,0 +1,8 @@ +Product { + qbsModuleProviders: ["provider_a"] + name: "p" + Depends { name: "qbsmetatestmodule" } + property bool dummy: { + console.info("p.qbsmetatestmodule.boolProp: " + JSON.stringify(qbsmetatestmodule.boolProp)); + } +} diff --git a/tests/auto/blackbox/testdata-providers/providers-properties/module-providers/provider_a.qbs b/tests/auto/blackbox/testdata-providers/providers-properties/module-providers/provider_a.qbs new file mode 100644 index 000000000..ab9d475d8 --- /dev/null +++ b/tests/auto/blackbox/testdata-providers/providers-properties/module-providers/provider_a.qbs @@ -0,0 +1,9 @@ +import "../../qbs-module-providers-helpers.js" as Helpers + +ModuleProvider { + property stringList someProp: "provider_a" + relativeSearchPaths: { + Helpers.writeModule(outputBaseDir, "qbsmetatestmodule", undefined, someProp); + return ""; + } +} diff --git a/tests/auto/blackbox/testdata-providers/providers-properties/module-providers/provider_b.qbs b/tests/auto/blackbox/testdata-providers/providers-properties/module-providers/provider_b.qbs new file mode 100644 index 000000000..1b2a79979 --- /dev/null +++ b/tests/auto/blackbox/testdata-providers/providers-properties/module-providers/provider_b.qbs @@ -0,0 +1,9 @@ +import "../../qbs-module-providers-helpers.js" as Helpers + +ModuleProvider { + property stringList someProp: "provider_b" + relativeSearchPaths: { + Helpers.writeModule(outputBaseDir, "qbsothermodule", undefined, someProp); + return ""; + } +} diff --git a/tests/auto/blackbox/testdata-providers/providers-properties/providers-properties.qbs b/tests/auto/blackbox/testdata-providers/providers-properties/providers-properties.qbs new file mode 100644 index 000000000..258a973fa --- /dev/null +++ b/tests/auto/blackbox/testdata-providers/providers-properties/providers-properties.qbs @@ -0,0 +1,12 @@ +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.listProp: " + + JSON.stringify(qbsmetatestmodule.listProp)); + console.info("p.qbsothermodule.listProp: " + JSON.stringify(qbsothermodule.listProp)); + } +} diff --git a/tests/auto/blackbox/testdata-providers/qbs-module-properties-in-providers/module-providers/provider_a.qbs b/tests/auto/blackbox/testdata-providers/qbs-module-properties-in-providers/module-providers/provider_a.qbs new file mode 100644 index 000000000..95c89cd1c --- /dev/null +++ b/tests/auto/blackbox/testdata-providers/qbs-module-properties-in-providers/module-providers/provider_a.qbs @@ -0,0 +1,9 @@ +import "../../qbs-module-providers-helpers.js" as Helpers + +ModuleProvider { + property string sysroot: qbs.sysroot + relativeSearchPaths: { + Helpers.writeModule(outputBaseDir, "qbsmetatestmodule", sysroot); + return ""; + } +} diff --git a/tests/auto/blackbox/testdata-providers/qbs-module-properties-in-providers/qbs-module-properties-in-providers.qbs b/tests/auto/blackbox/testdata-providers/qbs-module-properties-in-providers/qbs-module-properties-in-providers.qbs new file mode 100644 index 000000000..c2fc58299 --- /dev/null +++ b/tests/auto/blackbox/testdata-providers/qbs-module-properties-in-providers/qbs-module-properties-in-providers.qbs @@ -0,0 +1,34 @@ +Project { + qbsModuleProviders: "provider_a" + name: "project" + + Profile { + name: "profile1" + qbs.sysroot: "/sysroot1" + } + + Profile { + name: "profile2" + qbs.sysroot: "/sysroot2" + } + + Product { + name: "product1" + Depends { name: "qbsmetatestmodule" } + property bool dummy: { + console.info("product1.qbsmetatestmodule.prop: " + qbsmetatestmodule.prop); + } + // multiplex over profiles, sysroot should not be cached + qbs.profiles: ["profile1", "profile2"] + } + + Product { + name: "product2" + Depends { name: "qbsmetatestmodule" } + property bool dummy: { + console.info("product2.qbsmetatestmodule.prop: " + qbsmetatestmodule.prop); + } + // multiplex over profiles, sysroot should not be cached + qbs.profiles: ["profile1", "profile2"] + } +} diff --git a/tests/auto/blackbox/testdata-providers/qbs-module-providers-cli-override/module-providers/provider_a.qbs b/tests/auto/blackbox/testdata-providers/qbs-module-providers-cli-override/module-providers/provider_a.qbs new file mode 100644 index 000000000..d34d1cac5 --- /dev/null +++ b/tests/auto/blackbox/testdata-providers/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-providers/qbs-module-providers-cli-override/module-providers/provider_b.qbs b/tests/auto/blackbox/testdata-providers/qbs-module-providers-cli-override/module-providers/provider_b.qbs new file mode 100644 index 000000000..767e30923 --- /dev/null +++ b/tests/auto/blackbox/testdata-providers/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-providers/qbs-module-providers-cli-override/qbs-module-providers-cli-override.qbs b/tests/auto/blackbox/testdata-providers/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-providers/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-providers/qbs-module-providers-compatibility/module-providers/named_provider.qbs b/tests/auto/blackbox/testdata-providers/qbs-module-providers-compatibility/module-providers/named_provider.qbs new file mode 100644 index 000000000..07114b5ef --- /dev/null +++ b/tests/auto/blackbox/testdata-providers/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-providers/qbs-module-providers-compatibility/module-providers/qbsmetatestmodule/provider.qbs b/tests/auto/blackbox/testdata-providers/qbs-module-providers-compatibility/module-providers/qbsmetatestmodule/provider.qbs new file mode 100644 index 000000000..b04a52261 --- /dev/null +++ b/tests/auto/blackbox/testdata-providers/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-providers/qbs-module-providers-compatibility/qbs-module-providers-compatibility.qbs b/tests/auto/blackbox/testdata-providers/qbs-module-providers-compatibility/qbs-module-providers-compatibility.qbs new file mode 100644 index 000000000..7885b540a --- /dev/null +++ b/tests/auto/blackbox/testdata-providers/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-providers/qbs-module-providers-helpers.js b/tests/auto/blackbox/testdata-providers/qbs-module-providers-helpers.js new file mode 100644 index 000000000..8b6d9e275 --- /dev/null +++ b/tests/auto/blackbox/testdata-providers/qbs-module-providers-helpers.js @@ -0,0 +1,23 @@ +var File = require("qbs.File"); +var FileInfo = require("qbs.FileInfo"); +var TextFile = require("qbs.TextFile"); +var ModUtils = require("qbs.ModUtils"); + +function writeModule(outputBaseDir, name, prop, listProp, boolProp) { + 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: " + ModUtils.toJSLiteral(prop)); + if (listProp) { + module.writeLine(" property stringList listProp: " + + ModUtils.toJSLiteral(listProp)); + } + if (boolProp) { + module.writeLine(" property bool boolProp: " + + ModUtils.toJSLiteral(boolProp)); + } + module.writeLine("}"); + module.close(); +} diff --git a/tests/auto/blackbox/testdata-providers/qbs-module-providers/module-providers/provider_a.qbs b/tests/auto/blackbox/testdata-providers/qbs-module-providers/module-providers/provider_a.qbs new file mode 100644 index 000000000..d34d1cac5 --- /dev/null +++ b/tests/auto/blackbox/testdata-providers/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-providers/qbs-module-providers/module-providers/provider_b.qbs b/tests/auto/blackbox/testdata-providers/qbs-module-providers/module-providers/provider_b.qbs new file mode 100644 index 000000000..767e30923 --- /dev/null +++ b/tests/auto/blackbox/testdata-providers/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-providers/qbs-module-providers/qbs-module-providers.qbs b/tests/auto/blackbox/testdata-providers/qbs-module-providers/qbs-module-providers.qbs new file mode 100644 index 000000000..00776a62e --- /dev/null +++ b/tests/auto/blackbox/testdata-providers/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/testdata-providers/qbspkgconfig-module-provider/libs/libA.cpp b/tests/auto/blackbox/testdata-providers/qbspkgconfig-module-provider/libs/libA.cpp new file mode 100644 index 000000000..0c5274415 --- /dev/null +++ b/tests/auto/blackbox/testdata-providers/qbspkgconfig-module-provider/libs/libA.cpp @@ -0,0 +1,14 @@ +#include "libA.h" + +#include + +void foo() +{ + std::cout << "hello from foo: "; +#ifdef MYLIB_FRAMEWORK + std::cout << "bundled: yes"; +#else + std::cout << "bundled: no"; +#endif + std::cout << std::endl; +} diff --git a/tests/auto/blackbox/testdata-providers/qbspkgconfig-module-provider/libs/libA.h b/tests/auto/blackbox/testdata-providers/qbspkgconfig-module-provider/libs/libA.h new file mode 100644 index 000000000..ddaaf1609 --- /dev/null +++ b/tests/auto/blackbox/testdata-providers/qbspkgconfig-module-provider/libs/libA.h @@ -0,0 +1,21 @@ +#pragma once + +#if defined(_WIN32) || defined(WIN32) +# define DECL_EXPORT __declspec(dllexport) +# define DECL_IMPORT __declspec(dllimport) +#else +# define DECL_EXPORT __attribute__((visibility("default"))) +# define DECL_IMPORT __attribute__((visibility("default"))) +# endif + +#if defined(LIBA_STATIC_LIBRARY) +# define LIBA_EXPORT +#else +# if defined(MYLIB_LIBRARY) +# define LIBA_EXPORT DECL_EXPORT +# else +# define LIBA_EXPORT DECL_IMPORT +# endif +#endif + +LIBA_EXPORT void foo(); diff --git a/tests/auto/blackbox/testdata-providers/qbspkgconfig-module-provider/libs/libs.qbs b/tests/auto/blackbox/testdata-providers/qbspkgconfig-module-provider/libs/libs.qbs new file mode 100644 index 000000000..b473083c6 --- /dev/null +++ b/tests/auto/blackbox/testdata-providers/qbspkgconfig-module-provider/libs/libs.qbs @@ -0,0 +1,42 @@ +import qbs.FileInfo + +Project { + property bool isBundle: false + + DynamicLibrary { + Depends { name: "cpp" } + Depends { name: "bundle" } + Depends { name: "Exporter.pkgconfig" } + Exporter.pkgconfig.versionEntry: "1.0" + name: "libA" + bundle.isBundle: project.isBundle + bundle.publicHeaders: ["libA.h"] + files: "libA.cpp" + cpp.defines: { + var result = []; + if (project.isBundle) + result.push("MYLIB_FRAMEWORK"); + return result; + } + qbs.installPrefix: "/usr" + install: true + installImportLib: true + installDir: "lib" + Group { + files: ["libA.h"] + qbs.install: !project.isBundle + qbs.installDir: FileInfo.joinPaths("include", product.name) + } + Group { + fileTagsFilter: ["Exporter.pkgconfig.pc"] + qbs.install: !project.isBundle + qbs.installDir: FileInfo.joinPaths("share", "pkgconfig") + } + Export { + Depends { name: "cpp" } + cpp.defines: ["THE_MAGIC_DEFINE"] + cpp.includePaths: [FileInfo.joinPaths(exportingProduct.qbs.installPrefix, "include")] + cpp.libraryPaths: [FileInfo.joinPaths(exportingProduct.qbs.installPrefix, "lib")] + } + } +} diff --git a/tests/auto/blackbox/testdata-providers/qbspkgconfig-module-provider/main.cpp b/tests/auto/blackbox/testdata-providers/qbspkgconfig-module-provider/main.cpp new file mode 100644 index 000000000..5fa0f7eed --- /dev/null +++ b/tests/auto/blackbox/testdata-providers/qbspkgconfig-module-provider/main.cpp @@ -0,0 +1,11 @@ +#include + +#ifndef THE_MAGIC_DEFINE +#error "missing the magic define" +#endif + +int main() +{ + foo(); + return 0; +} diff --git a/tests/auto/blackbox/testdata-providers/qbspkgconfig-module-provider/qbspkgconfig-module-provider.qbs b/tests/auto/blackbox/testdata-providers/qbspkgconfig-module-provider/qbspkgconfig-module-provider.qbs new file mode 100644 index 000000000..d2b3654ae --- /dev/null +++ b/tests/auto/blackbox/testdata-providers/qbspkgconfig-module-provider/qbspkgconfig-module-provider.qbs @@ -0,0 +1,6 @@ +CppApplication { + name: "p" + Depends { name: "libA" } + files: "main.cpp" + qbsModuleProviders: "qbspkgconfig" +} diff --git a/tests/auto/blackbox/testdata/fallback-module-provider/fallback-module-provider.qbs b/tests/auto/blackbox/testdata/fallback-module-provider/fallback-module-provider.qbs deleted file mode 100644 index a798e15b3..000000000 --- a/tests/auto/blackbox/testdata/fallback-module-provider/fallback-module-provider.qbs +++ /dev/null @@ -1,8 +0,0 @@ -CppApplication { - name: "p" - property bool fallbacksEnabled - Depends { name: "pkgconfig"; required: false } - Depends { name: "qbsmetatestmodule"; required: false; enableFallback: fallbacksEnabled } - property bool dummy: { console.info("pkg-config present: " + pkgconfig.present); } - files: "main.cpp" -} diff --git a/tests/auto/blackbox/testdata/fallback-module-provider/libdir/qbsmetatestmodule.pc b/tests/auto/blackbox/testdata/fallback-module-provider/libdir/qbsmetatestmodule.pc deleted file mode 100644 index ae4daba89..000000000 --- a/tests/auto/blackbox/testdata/fallback-module-provider/libdir/qbsmetatestmodule.pc +++ /dev/null @@ -1,5 +0,0 @@ -Name: qbsmetatestmodule -Description: just a test -Version: 0.0.1 - -Cflags: -DTHE_MAGIC_DEFINE diff --git a/tests/auto/blackbox/testdata/fallback-module-provider/main.cpp b/tests/auto/blackbox/testdata/fallback-module-provider/main.cpp deleted file mode 100644 index 442b755bf..000000000 --- a/tests/auto/blackbox/testdata/fallback-module-provider/main.cpp +++ /dev/null @@ -1,5 +0,0 @@ -#ifndef THE_MAGIC_DEFINE -#error "missing the magic define" -#endif - -int main() {} diff --git a/tests/auto/blackbox/testdata/module-providers-cache/module-providers-cache.qbs b/tests/auto/blackbox/testdata/module-providers-cache/module-providers-cache.qbs deleted file mode 100644 index 508ed84d2..000000000 --- a/tests/auto/blackbox/testdata/module-providers-cache/module-providers-cache.qbs +++ /dev/null @@ -1,11 +0,0 @@ -Project { - qbsModuleProviders: ["provider_a"] - name: "project" - property string dummyProp - - Product { - name: "p1" - Depends { name: "qbsothermodule" } - Depends { name: "qbsmetatestmodule" } - } -} diff --git a/tests/auto/blackbox/testdata/module-providers-cache/module-providers/provider_a.qbs b/tests/auto/blackbox/testdata/module-providers-cache/module-providers/provider_a.qbs deleted file mode 100644 index 782cf7d25..000000000 --- a/tests/auto/blackbox/testdata/module-providers-cache/module-providers/provider_a.qbs +++ /dev/null @@ -1,9 +0,0 @@ -import "../../qbs-module-providers-helpers.js" as Helpers - -ModuleProvider { - relativeSearchPaths: { - Helpers.writeModule(outputBaseDir, "qbsmetatestmodule", "from_provider_a"); - Helpers.writeModule(outputBaseDir, "qbsothermodule", "from_provider_a"); - return ""; - } -} diff --git a/tests/auto/blackbox/testdata/module-providers/main.cpp b/tests/auto/blackbox/testdata/module-providers/main.cpp deleted file mode 100644 index 85a4f551c..000000000 --- a/tests/auto/blackbox/testdata/module-providers/main.cpp +++ /dev/null @@ -1,8 +0,0 @@ -#include - -int main() -{ - std::cout << "The letters are " << LETTER1 << " and " << LETTER2 << std::endl; - std::cout << "The MY_DEFINE is " << MY_DEFINE << std::endl; - return 0; -} diff --git a/tests/auto/blackbox/testdata/module-providers/module-providers.qbs b/tests/auto/blackbox/testdata/module-providers/module-providers.qbs deleted file mode 100644 index e83c80bb1..000000000 --- a/tests/auto/blackbox/testdata/module-providers/module-providers.qbs +++ /dev/null @@ -1,35 +0,0 @@ -import qbs.Host - -Project { - property bool enabled: { - var result = qbs.targetPlatform === Host.platform(); - if (!result) - console.info("targetPlatform differs from hostPlatform"); - return result; - } - readonly property string beginning: "beginning" - CppApplication { - name: "app1" - Depends { name: "mygenerator.module1" } - Depends { name: "mygenerator.module2" } - Depends { name: "othergenerator" } - moduleProviders.mygenerator.chooseLettersFrom: project.beginning - moduleProviders.othergenerator.someDefines: name - files: "main.cpp" - } - CppApplication { - readonly property string end: "end" - name: "app2" - Depends { name: "mygenerator.module1" } - Depends { name: "mygenerator.module2" } - Depends { name: "othergenerator" } - Profile { - name: "myProfile" - baseProfile: project.profile - moduleProviders.mygenerator.chooseLettersFrom: product.end - moduleProviders.othergenerator.someDefines: "app2" - } - qbs.profile: "myProfile" - files: "main.cpp" - } -} diff --git a/tests/auto/blackbox/testdata/module-providers/module-providers/mygenerator/provider.qbs b/tests/auto/blackbox/testdata/module-providers/module-providers/mygenerator/provider.qbs deleted file mode 100644 index dae02c03a..000000000 --- a/tests/auto/blackbox/testdata/module-providers/module-providers/mygenerator/provider.qbs +++ /dev/null @@ -1,31 +0,0 @@ -import qbs.File; -import qbs.FileInfo; -import qbs.TextFile; - -ModuleProvider { - property string chooseLettersFrom - relativeSearchPaths: { - console.info("Running setup script for " + name); - var startAtBeginning = chooseLettersFrom === "beginning"; - var moduleBaseDir = FileInfo.joinPaths(outputBaseDir, "modules", "mygenerator"); - var module1Dir = FileInfo.joinPaths(moduleBaseDir, "module1"); - File.makePath(module1Dir); - var module1 = new TextFile(FileInfo.joinPaths(module1Dir, "module1.qbs"), TextFile.WriteOnly); - module1.writeLine("Module {"); - module1.writeLine(" Depends { name: 'cpp' }"); - module1.writeLine(" cpp.defines: 'LETTER1=" + (startAtBeginning ? "\\\'A\\\'" : "\\\'Z\\\'") - + "'"); - module1.writeLine("}"); - module1.close(); - var module2Dir = FileInfo.joinPaths(moduleBaseDir, "module2"); - File.makePath(module2Dir); - var module2 = new TextFile(FileInfo.joinPaths(module2Dir, "module2.qbs"), TextFile.WriteOnly); - module2.writeLine("Module {"); - module2.writeLine(" Depends { name: 'cpp' }"); - module2.writeLine(" cpp.defines: 'LETTER2=" + (startAtBeginning ? "\\\'B\\\'" : "\\\'Y\\\'") - + "'"); - module2.writeLine("}"); - module2.close(); - return ""; - } -} diff --git a/tests/auto/blackbox/testdata/module-providers/module-providers/othergenerator/provider.qbs b/tests/auto/blackbox/testdata/module-providers/module-providers/othergenerator/provider.qbs deleted file mode 100644 index 66557037c..000000000 --- a/tests/auto/blackbox/testdata/module-providers/module-providers/othergenerator/provider.qbs +++ /dev/null @@ -1,19 +0,0 @@ -import qbs.File; -import qbs.FileInfo; -import qbs.TextFile; - -ModuleProvider { - property string someDefines - relativeSearchPaths: { - console.info("Running setup script for " + name); - var moduleDir = FileInfo.joinPaths(outputBaseDir, "modules", "othergenerator"); - File.makePath(moduleDir); - var module = new TextFile(FileInfo.joinPaths(moduleDir, "module.qbs"), TextFile.WriteOnly); - module.writeLine("Module {"); - module.writeLine(" Depends { name: 'cpp' }"); - module.writeLine(" cpp.defines: 'MY_DEFINE=\"" + someDefines + "\"'"); - module.writeLine("}"); - module.close(); - return ""; - } -} diff --git a/tests/auto/blackbox/testdata/probe-in-module-provider/module-providers/provider_a.qbs b/tests/auto/blackbox/testdata/probe-in-module-provider/module-providers/provider_a.qbs deleted file mode 100644 index 8a7c7d6ed..000000000 --- a/tests/auto/blackbox/testdata/probe-in-module-provider/module-providers/provider_a.qbs +++ /dev/null @@ -1,16 +0,0 @@ -import "../../qbs-module-providers-helpers.js" as Helpers - -ModuleProvider { - Probe { - id: theProbe - configure: { - console.info("Running probe"); - found = true; - } - } - property bool found: theProbe.found - relativeSearchPaths: { - Helpers.writeModule(outputBaseDir, "qbsmetatestmodule", undefined, undefined, found); - return ""; - } -} diff --git a/tests/auto/blackbox/testdata/probe-in-module-provider/probe-in-module-provider.qbs b/tests/auto/blackbox/testdata/probe-in-module-provider/probe-in-module-provider.qbs deleted file mode 100644 index cb346beeb..000000000 --- a/tests/auto/blackbox/testdata/probe-in-module-provider/probe-in-module-provider.qbs +++ /dev/null @@ -1,8 +0,0 @@ -Product { - qbsModuleProviders: ["provider_a"] - name: "p" - Depends { name: "qbsmetatestmodule" } - property bool dummy: { - console.info("p.qbsmetatestmodule.boolProp: " + JSON.stringify(qbsmetatestmodule.boolProp)); - } -} 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 deleted file mode 100644 index ab9d475d8..000000000 --- a/tests/auto/blackbox/testdata/providers-properties/module-providers/provider_a.qbs +++ /dev/null @@ -1,9 +0,0 @@ -import "../../qbs-module-providers-helpers.js" as Helpers - -ModuleProvider { - property stringList someProp: "provider_a" - relativeSearchPaths: { - Helpers.writeModule(outputBaseDir, "qbsmetatestmodule", undefined, 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 deleted file mode 100644 index 1b2a79979..000000000 --- a/tests/auto/blackbox/testdata/providers-properties/module-providers/provider_b.qbs +++ /dev/null @@ -1,9 +0,0 @@ -import "../../qbs-module-providers-helpers.js" as Helpers - -ModuleProvider { - property stringList someProp: "provider_b" - relativeSearchPaths: { - Helpers.writeModule(outputBaseDir, "qbsothermodule", undefined, someProp); - return ""; - } -} diff --git a/tests/auto/blackbox/testdata/providers-properties/providers-properties.qbs b/tests/auto/blackbox/testdata/providers-properties/providers-properties.qbs deleted file mode 100644 index 258a973fa..000000000 --- a/tests/auto/blackbox/testdata/providers-properties/providers-properties.qbs +++ /dev/null @@ -1,12 +0,0 @@ -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.listProp: " - + JSON.stringify(qbsmetatestmodule.listProp)); - console.info("p.qbsothermodule.listProp: " + JSON.stringify(qbsothermodule.listProp)); - } -} diff --git a/tests/auto/blackbox/testdata/qbs-module-properties-in-providers/module-providers/provider_a.qbs b/tests/auto/blackbox/testdata/qbs-module-properties-in-providers/module-providers/provider_a.qbs deleted file mode 100644 index 95c89cd1c..000000000 --- a/tests/auto/blackbox/testdata/qbs-module-properties-in-providers/module-providers/provider_a.qbs +++ /dev/null @@ -1,9 +0,0 @@ -import "../../qbs-module-providers-helpers.js" as Helpers - -ModuleProvider { - property string sysroot: qbs.sysroot - relativeSearchPaths: { - Helpers.writeModule(outputBaseDir, "qbsmetatestmodule", sysroot); - return ""; - } -} diff --git a/tests/auto/blackbox/testdata/qbs-module-properties-in-providers/qbs-module-properties-in-providers.qbs b/tests/auto/blackbox/testdata/qbs-module-properties-in-providers/qbs-module-properties-in-providers.qbs deleted file mode 100644 index c2fc58299..000000000 --- a/tests/auto/blackbox/testdata/qbs-module-properties-in-providers/qbs-module-properties-in-providers.qbs +++ /dev/null @@ -1,34 +0,0 @@ -Project { - qbsModuleProviders: "provider_a" - name: "project" - - Profile { - name: "profile1" - qbs.sysroot: "/sysroot1" - } - - Profile { - name: "profile2" - qbs.sysroot: "/sysroot2" - } - - Product { - name: "product1" - Depends { name: "qbsmetatestmodule" } - property bool dummy: { - console.info("product1.qbsmetatestmodule.prop: " + qbsmetatestmodule.prop); - } - // multiplex over profiles, sysroot should not be cached - qbs.profiles: ["profile1", "profile2"] - } - - Product { - name: "product2" - Depends { name: "qbsmetatestmodule" } - property bool dummy: { - console.info("product2.qbsmetatestmodule.prop: " + qbsmetatestmodule.prop); - } - // multiplex over profiles, sysroot should not be cached - qbs.profiles: ["profile1", "profile2"] - } -} 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 deleted file mode 100644 index d34d1cac5..000000000 --- a/tests/auto/blackbox/testdata/qbs-module-providers-cli-override/module-providers/provider_a.qbs +++ /dev/null @@ -1,8 +0,0 @@ -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 deleted file mode 100644 index 767e30923..000000000 --- a/tests/auto/blackbox/testdata/qbs-module-providers-cli-override/module-providers/provider_b.qbs +++ /dev/null @@ -1,9 +0,0 @@ -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 deleted file mode 100644 index 6f94ab207..000000000 --- a/tests/auto/blackbox/testdata/qbs-module-providers-cli-override/qbs-module-providers-cli-override.qbs +++ /dev/null @@ -1,13 +0,0 @@ -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 deleted file mode 100644 index 07114b5ef..000000000 --- a/tests/auto/blackbox/testdata/qbs-module-providers-compatibility/module-providers/named_provider.qbs +++ /dev/null @@ -1,8 +0,0 @@ -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 deleted file mode 100644 index b04a52261..000000000 --- a/tests/auto/blackbox/testdata/qbs-module-providers-compatibility/module-providers/qbsmetatestmodule/provider.qbs +++ /dev/null @@ -1,8 +0,0 @@ -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 deleted file mode 100644 index 7885b540a..000000000 --- a/tests/auto/blackbox/testdata/qbs-module-providers-compatibility/qbs-module-providers-compatibility.qbs +++ /dev/null @@ -1,7 +0,0 @@ -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 deleted file mode 100644 index 8b6d9e275..000000000 --- a/tests/auto/blackbox/testdata/qbs-module-providers-helpers.js +++ /dev/null @@ -1,23 +0,0 @@ -var File = require("qbs.File"); -var FileInfo = require("qbs.FileInfo"); -var TextFile = require("qbs.TextFile"); -var ModUtils = require("qbs.ModUtils"); - -function writeModule(outputBaseDir, name, prop, listProp, boolProp) { - 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: " + ModUtils.toJSLiteral(prop)); - if (listProp) { - module.writeLine(" property stringList listProp: " - + ModUtils.toJSLiteral(listProp)); - } - if (boolProp) { - module.writeLine(" property bool boolProp: " - + ModUtils.toJSLiteral(boolProp)); - } - 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 deleted file mode 100644 index d34d1cac5..000000000 --- a/tests/auto/blackbox/testdata/qbs-module-providers/module-providers/provider_a.qbs +++ /dev/null @@ -1,8 +0,0 @@ -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 deleted file mode 100644 index 767e30923..000000000 --- a/tests/auto/blackbox/testdata/qbs-module-providers/module-providers/provider_b.qbs +++ /dev/null @@ -1,9 +0,0 @@ -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 deleted file mode 100644 index 00776a62e..000000000 --- a/tests/auto/blackbox/testdata/qbs-module-providers/qbs-module-providers.qbs +++ /dev/null @@ -1,28 +0,0 @@ -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/testdata/qbspkgconfig-module-provider/libs/libA.cpp b/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/libs/libA.cpp deleted file mode 100644 index 0c5274415..000000000 --- a/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/libs/libA.cpp +++ /dev/null @@ -1,14 +0,0 @@ -#include "libA.h" - -#include - -void foo() -{ - std::cout << "hello from foo: "; -#ifdef MYLIB_FRAMEWORK - std::cout << "bundled: yes"; -#else - std::cout << "bundled: no"; -#endif - std::cout << std::endl; -} diff --git a/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/libs/libA.h b/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/libs/libA.h deleted file mode 100644 index ddaaf1609..000000000 --- a/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/libs/libA.h +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -#if defined(_WIN32) || defined(WIN32) -# define DECL_EXPORT __declspec(dllexport) -# define DECL_IMPORT __declspec(dllimport) -#else -# define DECL_EXPORT __attribute__((visibility("default"))) -# define DECL_IMPORT __attribute__((visibility("default"))) -# endif - -#if defined(LIBA_STATIC_LIBRARY) -# define LIBA_EXPORT -#else -# if defined(MYLIB_LIBRARY) -# define LIBA_EXPORT DECL_EXPORT -# else -# define LIBA_EXPORT DECL_IMPORT -# endif -#endif - -LIBA_EXPORT void foo(); diff --git a/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/libs/libs.qbs b/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/libs/libs.qbs deleted file mode 100644 index b473083c6..000000000 --- a/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/libs/libs.qbs +++ /dev/null @@ -1,42 +0,0 @@ -import qbs.FileInfo - -Project { - property bool isBundle: false - - DynamicLibrary { - Depends { name: "cpp" } - Depends { name: "bundle" } - Depends { name: "Exporter.pkgconfig" } - Exporter.pkgconfig.versionEntry: "1.0" - name: "libA" - bundle.isBundle: project.isBundle - bundle.publicHeaders: ["libA.h"] - files: "libA.cpp" - cpp.defines: { - var result = []; - if (project.isBundle) - result.push("MYLIB_FRAMEWORK"); - return result; - } - qbs.installPrefix: "/usr" - install: true - installImportLib: true - installDir: "lib" - Group { - files: ["libA.h"] - qbs.install: !project.isBundle - qbs.installDir: FileInfo.joinPaths("include", product.name) - } - Group { - fileTagsFilter: ["Exporter.pkgconfig.pc"] - qbs.install: !project.isBundle - qbs.installDir: FileInfo.joinPaths("share", "pkgconfig") - } - Export { - Depends { name: "cpp" } - cpp.defines: ["THE_MAGIC_DEFINE"] - cpp.includePaths: [FileInfo.joinPaths(exportingProduct.qbs.installPrefix, "include")] - cpp.libraryPaths: [FileInfo.joinPaths(exportingProduct.qbs.installPrefix, "lib")] - } - } -} diff --git a/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/main.cpp b/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/main.cpp deleted file mode 100644 index 5fa0f7eed..000000000 --- a/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/main.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include - -#ifndef THE_MAGIC_DEFINE -#error "missing the magic define" -#endif - -int main() -{ - foo(); - return 0; -} diff --git a/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/qbspkgconfig-module-provider.qbs b/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/qbspkgconfig-module-provider.qbs deleted file mode 100644 index d2b3654ae..000000000 --- a/tests/auto/blackbox/testdata/qbspkgconfig-module-provider/qbspkgconfig-module-provider.qbs +++ /dev/null @@ -1,6 +0,0 @@ -CppApplication { - name: "p" - Depends { name: "libA" } - files: "main.cpp" - qbsModuleProviders: "qbspkgconfig" -} diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp index 98184ef2d..e8934c403 100644 --- a/tests/auto/blackbox/tst_blackbox.cpp +++ b/tests/auto/blackbox/tst_blackbox.cpp @@ -3431,23 +3431,6 @@ void TestBlackbox::probeInExportedModule() QVERIFY2(m_qbsStdout.contains("listProp: myother,my"), m_qbsStdout.constData()); } -void TestBlackbox::probeInModuleProvider() -{ - QDir::setCurrent(testDataDir + "/probe-in-module-provider"); - - QbsRunParameters params; - params.command = "build"; - params.arguments << "--force-probe-execution"; - QCOMPARE(runQbs(params), 0); - QVERIFY2(m_qbsStdout.contains("Running probe"), m_qbsStdout); - QVERIFY2(m_qbsStdout.contains("p.qbsmetatestmodule.boolProp: true"), m_qbsStdout); - WAIT_FOR_NEW_TIMESTAMP(); - touch("probe-in-module-provider.qbs"); - QCOMPARE(runQbs(), 0); - QVERIFY2(m_qbsStdout.contains("p.qbsmetatestmodule.boolProp: true"), m_qbsStdout); - QVERIFY2(!m_qbsStdout.contains("Running probe"), m_qbsStdout); -} - void TestBlackbox::probesAndArrayProperties() { QDir::setCurrent(testDataDir + "/probes-and-array-properties"); @@ -6006,19 +5989,6 @@ 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: \"first,second\""); - QCOMPARE(runQbs(params), 0); - QVERIFY2(m_qbsStdout.contains("p.qbsmetatestmodule.listProp: [\"someValue\"]"), m_qbsStdout); - QVERIFY2(m_qbsStdout.contains( - "p.qbsothermodule.listProp: [\"first\",\"second\"]"), m_qbsStdout); -} - void TestBlackbox::pseudoMultiplexing() { // This is "pseudo-multiplexing" on all platforms that initialize qbs.architectures @@ -6192,162 +6162,6 @@ void TestBlackbox::qbsConfigAddProfile_data() << QString("Profile properties must be key/value pairs"); } -// checks that we can set qbs module properties in providers and provider cache works corectly -void TestBlackbox::qbsModulePropertiesInProviders() -{ - QDir::setCurrent(testDataDir + "/qbs-module-properties-in-providers"); - - QbsRunParameters params("resolve"); - - QCOMPARE(runQbs(params), 0); - - // We have 2 products in 2 configurations, but second product should use the cached value - // so we should have only 2 copies of the module, not 4. - QCOMPARE(m_qbsStdout.count("Running setup script for qbsmetatestmodule"), 2); - - // Check that products get correct values from modules - QVERIFY2(m_qbsStdout.contains(("product1.qbsmetatestmodule.prop: /sysroot1")), m_qbsStdout); - QVERIFY2(m_qbsStdout.contains(("product1.qbsmetatestmodule.prop: /sysroot2")), m_qbsStdout); - - QVERIFY2(m_qbsStdout.contains(("product2.qbsmetatestmodule.prop: /sysroot1")), m_qbsStdout); - QVERIFY2(m_qbsStdout.contains(("product2.qbsmetatestmodule.prop: /sysroot2")), m_qbsStdout); -} - -// 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("arguments"); - QTest::addColumn("firstProp"); - QTest::addColumn("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("arguments"); - QTest::addColumn("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("arguments"); - QTest::addColumn("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"; -} - -void TestBlackbox::qbspkgconfigModuleProvider() -{ - QDir::setCurrent(testDataDir + "/qbspkgconfig-module-provider/libs"); - rmDirR(relativeBuildDir()); - - const auto commonParams = QbsRunParameters(QStringLiteral("install"), { - QStringLiteral("--install-root"), - QStringLiteral("install-root") - }); - auto dynamicParams = commonParams; - dynamicParams.arguments << "config:library" << "projects.libs.isBundle:false"; - QCOMPARE(runQbs(dynamicParams), 0); - - QDir::setCurrent(testDataDir + "/qbspkgconfig-module-provider"); - rmDirR(relativeBuildDir()); - - const auto sysroot = testDataDir + "/qbspkgconfig-module-provider/libs/install-root"; - - QbsRunParameters params; - params.arguments << "moduleProviders.qbspkgconfig.sysroot:" + sysroot; - QCOMPARE(runQbs(params), 0); -} - static QJsonObject getNextSessionPacket(QProcess &session, QByteArray &data) { int totalSize = -1; @@ -8053,136 +7867,6 @@ void TestBlackbox::maximumCxxLanguageVersion() m_qbsStdout.constData()); } -void TestBlackbox::moduleProviders() -{ - QDir::setCurrent(testDataDir + "/module-providers"); - - // Resolving in dry-run mode must not leave any data behind. - QCOMPARE(runQbs(QbsRunParameters("resolve", QStringList("-n"))), 0); - if (m_qbsStdout.contains("targetPlatform differs from hostPlatform")) - QSKIP("Cannot run binaries in cross-compiled build"); - QCOMPARE(m_qbsStdout.count("Running setup script for mygenerator"), 2); - QVERIFY(!QFile::exists(relativeBuildDir())); - - // Initial build. - QCOMPARE(runQbs(QbsRunParameters("run", QStringList{"-p", "app1"})), 0); - QVERIFY(QFile::exists(relativeBuildDir())); - QCOMPARE(m_qbsStdout.count("Running setup script for mygenerator"), 2); - QVERIFY2(m_qbsStdout.contains("The letters are A and B"), m_qbsStdout.constData()); - QVERIFY2(m_qbsStdout.contains("The MY_DEFINE is app1"), m_qbsStdout.constData()); - QCOMPARE(runQbs(QbsRunParameters("run", QStringList{"-p", "app2"})), 0); - QVERIFY2(m_qbsStdout.contains("The letters are Z and Y"), m_qbsStdout.constData()); - QVERIFY2(m_qbsStdout.contains("The MY_DEFINE is app2"), m_qbsStdout.constData()); - - // Rebuild with overridden module provider config. The output for product 2 must change, - // but no setup script must be re-run, because both config values have already been - // handled in the first run. - const QStringList resolveArgs("moduleProviders.mygenerator.chooseLettersFrom:beginning"); - QCOMPARE(runQbs(QbsRunParameters("resolve", resolveArgs)), 0); - QVERIFY2(!m_qbsStdout.contains("Running setup script"), m_qbsStdout.constData()); - QCOMPARE(runQbs(QbsRunParameters("run", QStringList{"-p", "app1"})), 0); - QVERIFY2(m_qbsStdout.contains("The letters are A and B"), m_qbsStdout.constData()); - QCOMPARE(runQbs(QbsRunParameters("run", QStringList{"-p", "app2"})), 0); - QVERIFY2(m_qbsStdout.contains("The letters are A and B"), m_qbsStdout.constData()); - - // Forcing Probe execution triggers a re-run of the setup script. But only once, - // because the module provider config is the same now. - QCOMPARE(runQbs(QbsRunParameters("resolve", QStringList(resolveArgs) - << "--force-probe-execution")), 0); - QCOMPARE(m_qbsStdout.count("Running setup script for mygenerator"), 1); - QCOMPARE(runQbs(QbsRunParameters("run", QStringList{"-p", "app1"})), 0); - QVERIFY2(m_qbsStdout.contains("The letters are A and B"), m_qbsStdout.constData()); - QCOMPARE(runQbs(QbsRunParameters("run", QStringList{"-p", "app2"})), 0); - QVERIFY2(m_qbsStdout.contains("The letters are A and B"), m_qbsStdout.constData()); - - // Now re-run without the module provider config override. Again, the setup script must - // run once, for the config value that was not present in the last run. - QCOMPARE(runQbs(QbsRunParameters("resolve")), 0); - QCOMPARE(m_qbsStdout.count("Running setup script for mygenerator"), 1); - QCOMPARE(runQbs(QbsRunParameters("run", QStringList{"-p", "app1"})), 0); - QVERIFY2(m_qbsStdout.contains("The letters are A and B"), m_qbsStdout.constData()); - QCOMPARE(runQbs(QbsRunParameters("run", QStringList{"-p", "app2"})), 0); - QVERIFY2(m_qbsStdout.contains("The letters are Z and Y"), m_qbsStdout.constData()); -} - -// Checks regression - when loading 2 modules from the same provider, the second module should -// come from provider cache -void TestBlackbox::moduleProvidersCache() -{ - QDir::setCurrent(testDataDir + "/module-providers-cache"); - - QbsRunParameters params("resolve", {"-v"}); - QCOMPARE(runQbs(params), 0); - const auto qbsmetatestmoduleMessage = "Re-checking for module \"qbsmetatestmodule\" with " - "newly added search paths from module provider"; - const auto qbsothermoduleMessage = "Re-checking for module \"qbsothermodule\" with " - "newly added search paths from module provider"; - QCOMPARE(m_qbsStderr.count(qbsmetatestmoduleMessage), 1); - QCOMPARE(m_qbsStderr.count(qbsothermoduleMessage), 1); - QCOMPARE(m_qbsStderr.count("Re-using provider \"provider_a\" from cache"), 1); - - // We didn't change providers, so both modules should come from cache. - params.arguments << "project.dummyProp:value"; - QCOMPARE(runQbs(params), 0); - QCOMPARE(m_qbsStderr.count(qbsmetatestmoduleMessage), 1); - QCOMPARE(m_qbsStderr.count(qbsothermoduleMessage), 1); - QCOMPARE(m_qbsStderr.count("Re-using provider \"provider_a\" from cache"), 2); -} - -void TestBlackbox::fallbackModuleProvider_data() -{ - QTest::addColumn("fallbacksEnabledGlobally"); - QTest::addColumn("fallbacksEnabledInProduct"); - QTest::addColumn("pkgConfigLibDirs"); - QTest::addColumn("successExpected"); - QTest::newRow("without custom lib dir, fallbacks disabled globally and in product") - << false << false << QStringList() << false; - QTest::newRow("without custom lib dir, fallbacks disabled globally, enabled in product") - << false << true << QStringList() << false; - QTest::newRow("without custom lib dir, fallbacks enabled globally, disabled in product") - << true << false << QStringList() << false; - QTest::newRow("without custom lib dir, fallbacks enabled globally and in product") - << true << true << QStringList() << false; - QTest::newRow("with custom lib dir, fallbacks disabled globally and in product") - << false << false << QStringList(testDataDir + "/fallback-module-provider/libdir") - << false; - QTest::newRow("with custom lib dir, fallbacks disabled globally, enabled in product") - << false << true << QStringList(testDataDir + "/fallback-module-provider/libdir") - << false; - QTest::newRow("with custom lib dir, fallbacks enabled globally, disabled in product") - << true << false << QStringList(testDataDir + "/fallback-module-provider/libdir") - << false; - QTest::newRow("with custom lib dir, fallbacks enabled globally and in product") - << true << true << QStringList(testDataDir + "/fallback-module-provider/libdir") - << true; -} - -void TestBlackbox::fallbackModuleProvider() -{ - QFETCH(bool, fallbacksEnabledInProduct); - QFETCH(bool, fallbacksEnabledGlobally); - QFETCH(QStringList, pkgConfigLibDirs); - QFETCH(bool, successExpected); - - QDir::setCurrent(testDataDir + "/fallback-module-provider"); - static const auto b2s = [](bool b) { return QString(b ? "true" : "false"); }; - QbsRunParameters resolveParams("resolve", - QStringList{"modules.pkgconfig.libDirs:" + pkgConfigLibDirs.join(','), - "products.p.fallbacksEnabled:" + b2s(fallbacksEnabledInProduct), - "--force-probe-execution"}); - if (!fallbacksEnabledGlobally) - resolveParams.arguments << "--no-fallback-module-provider"; - QCOMPARE(runQbs(resolveParams), 0); - const bool pkgConfigPresent = m_qbsStdout.contains("pkg-config present: true"); - const bool pkgConfigNotPresent = m_qbsStdout.contains("pkg-config present: false"); - QVERIFY(pkgConfigPresent != pkgConfigNotPresent); - if (pkgConfigNotPresent) - successExpected = false; - QbsRunParameters buildParams; - buildParams.expectFailure = !successExpected; - QCOMPARE(runQbs(buildParams) == 0, successExpected); -} - void TestBlackbox::minimumSystemVersion() { rmDirR(relativeBuildDir()); diff --git a/tests/auto/blackbox/tst_blackbox.h b/tests/auto/blackbox/tst_blackbox.h index 0bfdfc271..9abc84897 100644 --- a/tests/auto/blackbox/tst_blackbox.h +++ b/tests/auto/blackbox/tst_blackbox.h @@ -197,10 +197,6 @@ private slots: void makefileGenerator(); void maximumCLanguageVersion(); void maximumCxxLanguageVersion(); - void moduleProviders(); - void moduleProvidersCache(); - void fallbackModuleProvider_data(); - void fallbackModuleProvider(); void minimumSystemVersion(); void minimumSystemVersion_data(); void missingBuildGraph(); @@ -245,7 +241,6 @@ private slots: void probeProperties(); void probesAndShadowProducts(); void probeInExportedModule(); - void probeInModuleProvider(); void probesAndArrayProperties(); void probesInNestedModules(); void productDependenciesByType(); @@ -261,19 +256,10 @@ private slots: void protobuf_data(); void protobuf(); void protobufLibraryInstall(); - void providersProperties(); void pseudoMultiplexing(); void qbsConfig(); void qbsConfigAddProfile(); void qbsConfigAddProfile_data(); - void qbsModulePropertiesInProviders(); - void qbsModuleProviders(); - void qbsModuleProviders_data(); - void qbsModuleProvidersCliOverride(); - void qbsModuleProvidersCliOverride_data(); - void qbsModuleProvidersCompatibility(); - void qbsModuleProvidersCompatibility_data(); - void qbspkgconfigModuleProvider(); void qbsSession(); void qbsVersion(); void qtBug51237(); diff --git a/tests/auto/blackbox/tst_blackboxproviders.cpp b/tests/auto/blackbox/tst_blackboxproviders.cpp new file mode 100644 index 000000000..ceb413510 --- /dev/null +++ b/tests/auto/blackbox/tst_blackboxproviders.cpp @@ -0,0 +1,368 @@ +/**************************************************************************** +** +** Copyright (C) 2023 Ivan Komissarov (abbapoh@gmail.com) +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qbs. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms and +** conditions see http://www.qt.io/terms-conditions. For further information +** use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#include "tst_blackboxproviders.h" + +#include "../shared.h" + +// #include +// #include +// #include + +// #include +// #include + +// using qbs::Internal::HostOsInfo; +// using qbs::Profile; + +#define WAIT_FOR_NEW_TIMESTAMP() waitForNewTimestamp(testDataDir) + +TestBlackboxProviders::TestBlackboxProviders() + : TestBlackboxBase(SRCDIR "/testdata-providers", "blackbox-providers") +{ +} + +void TestBlackboxProviders::fallbackModuleProvider_data() +{ + QTest::addColumn("fallbacksEnabledGlobally"); + QTest::addColumn("fallbacksEnabledInProduct"); + QTest::addColumn("pkgConfigLibDirs"); + QTest::addColumn("successExpected"); + QTest::newRow("without custom lib dir, fallbacks disabled globally and in product") + << false << false << QStringList() << false; + QTest::newRow("without custom lib dir, fallbacks disabled globally, enabled in product") + << false << true << QStringList() << false; + QTest::newRow("without custom lib dir, fallbacks enabled globally, disabled in product") + << true << false << QStringList() << false; + QTest::newRow("without custom lib dir, fallbacks enabled globally and in product") + << true << true << QStringList() << false; + QTest::newRow("with custom lib dir, fallbacks disabled globally and in product") + << false << false << QStringList(testDataDir + "/fallback-module-provider/libdir") + << false; + QTest::newRow("with custom lib dir, fallbacks disabled globally, enabled in product") + << false << true << QStringList(testDataDir + "/fallback-module-provider/libdir") + << false; + QTest::newRow("with custom lib dir, fallbacks enabled globally, disabled in product") + << true << false << QStringList(testDataDir + "/fallback-module-provider/libdir") + << false; + QTest::newRow("with custom lib dir, fallbacks enabled globally and in product") + << true << true << QStringList(testDataDir + "/fallback-module-provider/libdir") + << true; +} + +void TestBlackboxProviders::fallbackModuleProvider() +{ + QFETCH(bool, fallbacksEnabledInProduct); + QFETCH(bool, fallbacksEnabledGlobally); + QFETCH(QStringList, pkgConfigLibDirs); + QFETCH(bool, successExpected); + + QDir::setCurrent(testDataDir + "/fallback-module-provider"); + static const auto b2s = [](bool b) { return QString(b ? "true" : "false"); }; + QbsRunParameters resolveParams("resolve", + QStringList{"modules.pkgconfig.libDirs:" + pkgConfigLibDirs.join(','), + "products.p.fallbacksEnabled:" + b2s(fallbacksEnabledInProduct), + "--force-probe-execution"}); + if (!fallbacksEnabledGlobally) + resolveParams.arguments << "--no-fallback-module-provider"; + QCOMPARE(runQbs(resolveParams), 0); + const bool pkgConfigPresent = m_qbsStdout.contains("pkg-config present: true"); + const bool pkgConfigNotPresent = m_qbsStdout.contains("pkg-config present: false"); + QVERIFY(pkgConfigPresent != pkgConfigNotPresent); + if (pkgConfigNotPresent) + successExpected = false; + QbsRunParameters buildParams; + buildParams.expectFailure = !successExpected; + QCOMPARE(runQbs(buildParams) == 0, successExpected); +} + +void TestBlackboxProviders::moduleProviders() +{ + QDir::setCurrent(testDataDir + "/module-providers"); + + // Resolving in dry-run mode must not leave any data behind. + QCOMPARE(runQbs(QbsRunParameters("resolve", QStringList("-n"))), 0); + if (m_qbsStdout.contains("targetPlatform differs from hostPlatform")) + QSKIP("Cannot run binaries in cross-compiled build"); + QCOMPARE(m_qbsStdout.count("Running setup script for mygenerator"), 2); + QVERIFY(!QFile::exists(relativeBuildDir())); + + // Initial build. + QCOMPARE(runQbs(QbsRunParameters("run", QStringList{"-p", "app1"})), 0); + QVERIFY(QFile::exists(relativeBuildDir())); + QCOMPARE(m_qbsStdout.count("Running setup script for mygenerator"), 2); + QVERIFY2(m_qbsStdout.contains("The letters are A and B"), m_qbsStdout.constData()); + QVERIFY2(m_qbsStdout.contains("The MY_DEFINE is app1"), m_qbsStdout.constData()); + QCOMPARE(runQbs(QbsRunParameters("run", QStringList{"-p", "app2"})), 0); + QVERIFY2(m_qbsStdout.contains("The letters are Z and Y"), m_qbsStdout.constData()); + QVERIFY2(m_qbsStdout.contains("The MY_DEFINE is app2"), m_qbsStdout.constData()); + + // Rebuild with overridden module provider config. The output for product 2 must change, + // but no setup script must be re-run, because both config values have already been + // handled in the first run. + const QStringList resolveArgs("moduleProviders.mygenerator.chooseLettersFrom:beginning"); + QCOMPARE(runQbs(QbsRunParameters("resolve", resolveArgs)), 0); + QVERIFY2(!m_qbsStdout.contains("Running setup script"), m_qbsStdout.constData()); + QCOMPARE(runQbs(QbsRunParameters("run", QStringList{"-p", "app1"})), 0); + QVERIFY2(m_qbsStdout.contains("The letters are A and B"), m_qbsStdout.constData()); + QCOMPARE(runQbs(QbsRunParameters("run", QStringList{"-p", "app2"})), 0); + QVERIFY2(m_qbsStdout.contains("The letters are A and B"), m_qbsStdout.constData()); + + // Forcing Probe execution triggers a re-run of the setup script. But only once, + // because the module provider config is the same now. + QCOMPARE(runQbs(QbsRunParameters("resolve", QStringList(resolveArgs) + << "--force-probe-execution")), 0); + QCOMPARE(m_qbsStdout.count("Running setup script for mygenerator"), 1); + QCOMPARE(runQbs(QbsRunParameters("run", QStringList{"-p", "app1"})), 0); + QVERIFY2(m_qbsStdout.contains("The letters are A and B"), m_qbsStdout.constData()); + QCOMPARE(runQbs(QbsRunParameters("run", QStringList{"-p", "app2"})), 0); + QVERIFY2(m_qbsStdout.contains("The letters are A and B"), m_qbsStdout.constData()); + + // Now re-run without the module provider config override. Again, the setup script must + // run once, for the config value that was not present in the last run. + QCOMPARE(runQbs(QbsRunParameters("resolve")), 0); + QCOMPARE(m_qbsStdout.count("Running setup script for mygenerator"), 1); + QCOMPARE(runQbs(QbsRunParameters("run", QStringList{"-p", "app1"})), 0); + QVERIFY2(m_qbsStdout.contains("The letters are A and B"), m_qbsStdout.constData()); + QCOMPARE(runQbs(QbsRunParameters("run", QStringList{"-p", "app2"})), 0); + QVERIFY2(m_qbsStdout.contains("The letters are Z and Y"), m_qbsStdout.constData()); +} + +// Checks regression - when loading 2 modules from the same provider, the second module should +// come from provider cache +void TestBlackboxProviders::moduleProvidersCache() +{ + QDir::setCurrent(testDataDir + "/module-providers-cache"); + + QbsRunParameters params("resolve", {"-v"}); + QCOMPARE(runQbs(params), 0); + const auto qbsmetatestmoduleMessage = "Re-checking for module \"qbsmetatestmodule\" with " + "newly added search paths from module provider"; + const auto qbsothermoduleMessage = "Re-checking for module \"qbsothermodule\" with " + "newly added search paths from module provider"; + QCOMPARE(m_qbsStderr.count(qbsmetatestmoduleMessage), 1); + QCOMPARE(m_qbsStderr.count(qbsothermoduleMessage), 1); + QCOMPARE(m_qbsStderr.count("Re-using provider \"provider_a\" from cache"), 1); + + // We didn't change providers, so both modules should come from cache. + params.arguments << "project.dummyProp:value"; + QCOMPARE(runQbs(params), 0); + QCOMPARE(m_qbsStderr.count(qbsmetatestmoduleMessage), 1); + QCOMPARE(m_qbsStderr.count(qbsothermoduleMessage), 1); + QCOMPARE(m_qbsStderr.count("Re-using provider \"provider_a\" from cache"), 2); +} + +void TestBlackboxProviders::probeInModuleProvider() +{ + QDir::setCurrent(testDataDir + "/probe-in-module-provider"); + + QbsRunParameters params; + params.command = "build"; + params.arguments << "--force-probe-execution"; + QCOMPARE(runQbs(params), 0); + QVERIFY2(m_qbsStdout.contains("Running probe"), m_qbsStdout); + QVERIFY2(m_qbsStdout.contains("p.qbsmetatestmodule.boolProp: true"), m_qbsStdout); + WAIT_FOR_NEW_TIMESTAMP(); + touch("probe-in-module-provider.qbs"); + QCOMPARE(runQbs(), 0); + QVERIFY2(m_qbsStdout.contains("p.qbsmetatestmodule.boolProp: true"), m_qbsStdout); + QVERIFY2(!m_qbsStdout.contains("Running probe"), m_qbsStdout); +} + +// Tests whether it is possible to set providers properties in a Product or from command-line +void TestBlackboxProviders::providersProperties() +{ + QDir::setCurrent(testDataDir + "/providers-properties"); + + QbsRunParameters params("build"); + params.arguments = QStringList("moduleProviders.provider_b.someProp: \"first,second\""); + QCOMPARE(runQbs(params), 0); + QVERIFY2(m_qbsStdout.contains("p.qbsmetatestmodule.listProp: [\"someValue\"]"), m_qbsStdout); + QVERIFY2(m_qbsStdout.contains( + "p.qbsothermodule.listProp: [\"first\",\"second\"]"), m_qbsStdout); +} + +// checks that we can set qbs module properties in providers and provider cache works corectly +void TestBlackboxProviders::qbsModulePropertiesInProviders() +{ + QDir::setCurrent(testDataDir + "/qbs-module-properties-in-providers"); + + QbsRunParameters params("resolve"); + + QCOMPARE(runQbs(params), 0); + + // We have 2 products in 2 configurations, but second product should use the cached value + // so we should have only 2 copies of the module, not 4. + QCOMPARE(m_qbsStdout.count("Running setup script for qbsmetatestmodule"), 2); + + // Check that products get correct values from modules + QVERIFY2(m_qbsStdout.contains(("product1.qbsmetatestmodule.prop: /sysroot1")), m_qbsStdout); + QVERIFY2(m_qbsStdout.contains(("product1.qbsmetatestmodule.prop: /sysroot2")), m_qbsStdout); + + QVERIFY2(m_qbsStdout.contains(("product2.qbsmetatestmodule.prop: /sysroot1")), m_qbsStdout); + QVERIFY2(m_qbsStdout.contains(("product2.qbsmetatestmodule.prop: /sysroot2")), m_qbsStdout); +} + +void TestBlackboxProviders::qbsModuleProviders_data() +{ + QTest::addColumn("arguments"); + QTest::addColumn("firstProp"); + QTest::addColumn("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 whether it is possible to set qbsModuleProviders in Product and Project items +// and that the order of providers results in correct priority +void TestBlackboxProviders::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 TestBlackboxProviders::qbsModuleProvidersCliOverride_data() +{ + QTest::addColumn("arguments"); + QTest::addColumn("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 possible use-cases how to override providers from command-line +void TestBlackboxProviders::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 TestBlackboxProviders::qbsModuleProvidersCompatibility_data() +{ + QTest::addColumn("arguments"); + QTest::addColumn("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"; +} + +// Tests whether scoped providers can be used as named, i.e. new provider machinery +// is compatible with the old one +void TestBlackboxProviders::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 TestBlackboxProviders::qbspkgconfigModuleProvider() +{ + QDir::setCurrent(testDataDir + "/qbspkgconfig-module-provider/libs"); + rmDirR(relativeBuildDir()); + + const auto commonParams = QbsRunParameters(QStringLiteral("install"), { + QStringLiteral("--install-root"), + QStringLiteral("install-root") + }); + auto dynamicParams = commonParams; + dynamicParams.arguments << "config:library" << "projects.libs.isBundle:false"; + QCOMPARE(runQbs(dynamicParams), 0); + + QDir::setCurrent(testDataDir + "/qbspkgconfig-module-provider"); + rmDirR(relativeBuildDir()); + + const auto sysroot = testDataDir + "/qbspkgconfig-module-provider/libs/install-root"; + + QbsRunParameters params; + params.arguments << "moduleProviders.qbspkgconfig.sysroot:" + sysroot; + QCOMPARE(runQbs(params), 0); +} + +QTEST_MAIN(TestBlackboxProviders) diff --git a/tests/auto/blackbox/tst_blackboxproviders.h b/tests/auto/blackbox/tst_blackboxproviders.h new file mode 100644 index 000000000..017cc1c5e --- /dev/null +++ b/tests/auto/blackbox/tst_blackboxproviders.h @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2023 Ivan Komissarov (abbapoh@gmail.com) +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qbs. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms and +** conditions see http://www.qt.io/terms-conditions. For further information +** use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#ifndef TST_BLACKBOXPROVIDERS_H +#define TST_BLACKBOXPROVIDERS_H + +#include "tst_blackboxbase.h" + +class TestBlackboxProviders : public TestBlackboxBase +{ + Q_OBJECT + +public: + TestBlackboxProviders(); + +private slots: + void fallbackModuleProvider_data(); + void fallbackModuleProvider(); + void moduleProviders(); + void moduleProvidersCache(); + void probeInModuleProvider(); + void providersProperties(); + void qbsModulePropertiesInProviders(); + void qbsModuleProviders_data(); + void qbsModuleProviders(); + void qbsModuleProvidersCliOverride(); + void qbsModuleProvidersCliOverride_data(); + void qbsModuleProvidersCompatibility(); + void qbsModuleProvidersCompatibility_data(); + void qbspkgconfigModuleProvider(); +}; + +#endif // TST_BLACKBOXPROVIDERS_H -- cgit v1.2.1