diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2018-05-14 10:26:58 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2018-05-15 07:37:15 +0000 |
commit | 979b2524818fa0b618ac8308c608c6a593e5f521 (patch) | |
tree | dc794a877864ca39df6a1a76e502ec8fc1fc4876 /tests | |
parent | 20d261df437c9c08462735909e9c62c2b7615a55 (diff) |
Allow module instances with the same priority in different search paths
The search path order provides additional prioritization. Conflicts can
now only occur between candidates in the same directory. This is needed
e.g. to allow distributions to provide global search paths.
Change-Id: I698a96e8943041fb0c4536901f75394bacd7fb40
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'tests')
10 files changed, 52 insertions, 9 deletions
diff --git a/tests/auto/blackbox/testdata/choose-module-instance/choose-module-instance.qbs b/tests/auto/blackbox/testdata/choose-module-instance/choose-module-instance.qbs index fb1f04d83..233e21746 100644 --- a/tests/auto/blackbox/testdata/choose-module-instance/choose-module-instance.qbs +++ b/tests/auto/blackbox/testdata/choose-module-instance/choose-module-instance.qbs @@ -2,7 +2,10 @@ import qbs import qbs.FileInfo Project { - qbsSearchPaths: [".", path, "modules/..", FileInfo.path(FileInfo.joinPaths(path, "modules"))] + qbsSearchPaths: [ + ".", path, "modules/..", FileInfo.path(FileInfo.joinPaths(path, "modules")), + "other-searchpath" + ] Product { Depends { name: "limerick" } type: ["text"] diff --git a/tests/auto/blackbox/testdata/choose-module-instance/other-searchpath/modules/limerick/generic.qbs b/tests/auto/blackbox/testdata/choose-module-instance/other-searchpath/modules/limerick/generic.qbs new file mode 100644 index 000000000..2ebaaac11 --- /dev/null +++ b/tests/auto/blackbox/testdata/choose-module-instance/other-searchpath/modules/limerick/generic.qbs @@ -0,0 +1,3 @@ +Module { + condition: !qbs.targetOS.contains("Beatles") +} diff --git a/tests/auto/language/testdata/erroneous/conflicting-module-instances-in-search-paths/bar/modules/conflicting-instances/bar.qbs b/tests/auto/language/testdata/erroneous/conflicting-module-instances-in-search-paths/bar/modules/conflicting-instances/bar.qbs deleted file mode 100644 index 84957060c..000000000 --- a/tests/auto/language/testdata/erroneous/conflicting-module-instances-in-search-paths/bar/modules/conflicting-instances/bar.qbs +++ /dev/null @@ -1,2 +0,0 @@ -Module { -} diff --git a/tests/auto/language/testdata/erroneous/conflicting-module-instances-in-search-paths/foo/modules/conflicting-instances/foo.qbs b/tests/auto/language/testdata/erroneous/conflicting-module-instances-in-search-paths/foo/modules/conflicting-instances/foo.qbs deleted file mode 100644 index 84957060c..000000000 --- a/tests/auto/language/testdata/erroneous/conflicting-module-instances-in-search-paths/foo/modules/conflicting-instances/foo.qbs +++ /dev/null @@ -1,2 +0,0 @@ -Module { -} diff --git a/tests/auto/language/testdata/module-prioritization-by-search-path/bar/modules/conflicting-instances/bar.qbs b/tests/auto/language/testdata/module-prioritization-by-search-path/bar/modules/conflicting-instances/bar.qbs new file mode 100644 index 000000000..4977557cc --- /dev/null +++ b/tests/auto/language/testdata/module-prioritization-by-search-path/bar/modules/conflicting-instances/bar.qbs @@ -0,0 +1,3 @@ +Module { + property string moduleVariant: "bar" +} diff --git a/tests/auto/language/testdata/module-prioritization-by-search-path/foo/modules/conflicting-instances/foo.qbs b/tests/auto/language/testdata/module-prioritization-by-search-path/foo/modules/conflicting-instances/foo.qbs new file mode 100644 index 000000000..3704662bd --- /dev/null +++ b/tests/auto/language/testdata/module-prioritization-by-search-path/foo/modules/conflicting-instances/foo.qbs @@ -0,0 +1,3 @@ +Module { + property string moduleVariant: "foo" +} diff --git a/tests/auto/language/testdata/erroneous/conflicting-module-instances-in-search-paths/product.qbs b/tests/auto/language/testdata/module-prioritization-by-search-path/product.qbs index 28033b174..28033b174 100644 --- a/tests/auto/language/testdata/erroneous/conflicting-module-instances-in-search-paths/product.qbs +++ b/tests/auto/language/testdata/module-prioritization-by-search-path/product.qbs diff --git a/tests/auto/language/testdata/erroneous/conflicting-module-instances-in-search-paths/project.qbs b/tests/auto/language/testdata/module-prioritization-by-search-path/project.qbs index 76ecc2b5a..113a5773c 100644 --- a/tests/auto/language/testdata/erroneous/conflicting-module-instances-in-search-paths/project.qbs +++ b/tests/auto/language/testdata/module-prioritization-by-search-path/project.qbs @@ -1,6 +1,5 @@ import qbs Project { - qbsSearchPaths: ["./foo", "./bar"] references: ["product.qbs"] } diff --git a/tests/auto/language/tst_language.cpp b/tests/auto/language/tst_language.cpp index e19eef7c0..ef549da21 100644 --- a/tests/auto/language/tst_language.cpp +++ b/tests/auto/language/tst_language.cpp @@ -819,9 +819,6 @@ void TestLanguage::erroneousFiles_data() QTest::newRow("conflicting-module-instances") << "There is more than one equally prioritized candidate for module " "'conflicting-instances'."; - QTest::newRow("conflicting-module-instances-in-search-paths/project") - << "There is more than one equally prioritized candidate for module " - "'conflicting-instances'."; QTest::newRow("module-depends-on-product") << "module-with-product-dependency.qbs:4:5.*Modules cannot depend on products."; QTest::newRow("overwrite-inherited-readonly-property") @@ -1492,6 +1489,43 @@ void TestLanguage::jsImportUsedInMultipleScopes() QVERIFY(!exceptionCaught); } +void TestLanguage::modulePrioritizationBySearchPath_data() +{ + QTest::addColumn<QStringList>("searchPaths"); + QTest::addColumn<QString>("expectedVariant"); + QTest::newRow("foo has priority") << QStringList{"./foo", "./bar"} << "foo"; + QTest::newRow("bar has priority") << QStringList{"./bar", "./foo"} << "bar"; +} + +void TestLanguage::modulePrioritizationBySearchPath() +{ + QFETCH(QStringList, searchPaths); + QFETCH(QString, expectedVariant); + + bool exceptionCaught = false; + try { + SetupProjectParameters params = defaultParameters; + params.setProjectFilePath(testProject("module-prioritization-by-search-path/project.qbs")); + params.setOverriddenValues({std::make_pair(QLatin1String("project.qbsSearchPaths"), + searchPaths)}); + params.expandBuildConfiguration(); + TopLevelProjectPtr project = loader->loadProject(params); + QVERIFY(!!project); + QHash<QString, ResolvedProductPtr> products = productsFromProject(project); + QCOMPARE(products.size(), 1); + ResolvedProductPtr product = products.values().front(); + QVERIFY(!!product); + const QString actualVariant = product->moduleProperties->moduleProperty + ("conflicting-instances", "moduleVariant").toString(); + QCOMPARE(actualVariant, expectedVariant); + } + catch (const ErrorInfo &e) { + exceptionCaught = true; + qDebug() << e.toString(); + } + QVERIFY(!exceptionCaught); +} + void TestLanguage::moduleProperties_data() { QTest::addColumn<QString>("propertyName"); diff --git a/tests/auto/language/tst_language.h b/tests/auto/language/tst_language.h index 21835a71e..b125b79a2 100644 --- a/tests/auto/language/tst_language.h +++ b/tests/auto/language/tst_language.h @@ -119,6 +119,8 @@ private slots: void jsExtensions(); void jsImportUsedInMultipleScopes_data(); void jsImportUsedInMultipleScopes(); + void modulePrioritizationBySearchPath_data(); + void modulePrioritizationBySearchPath(); void moduleProperties_data(); void moduleProperties(); void modulePropertiesInGroups(); |