aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2018-05-14 10:26:58 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2018-05-15 07:37:15 +0000
commit979b2524818fa0b618ac8308c608c6a593e5f521 (patch)
treedc794a877864ca39df6a1a76e502ec8fc1fc4876 /tests
parent20d261df437c9c08462735909e9c62c2b7615a55 (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')
-rw-r--r--tests/auto/blackbox/testdata/choose-module-instance/choose-module-instance.qbs5
-rw-r--r--tests/auto/blackbox/testdata/choose-module-instance/other-searchpath/modules/limerick/generic.qbs3
-rw-r--r--tests/auto/language/testdata/erroneous/conflicting-module-instances-in-search-paths/bar/modules/conflicting-instances/bar.qbs2
-rw-r--r--tests/auto/language/testdata/erroneous/conflicting-module-instances-in-search-paths/foo/modules/conflicting-instances/foo.qbs2
-rw-r--r--tests/auto/language/testdata/module-prioritization-by-search-path/bar/modules/conflicting-instances/bar.qbs3
-rw-r--r--tests/auto/language/testdata/module-prioritization-by-search-path/foo/modules/conflicting-instances/foo.qbs3
-rw-r--r--tests/auto/language/testdata/module-prioritization-by-search-path/product.qbs (renamed from tests/auto/language/testdata/erroneous/conflicting-module-instances-in-search-paths/product.qbs)0
-rw-r--r--tests/auto/language/testdata/module-prioritization-by-search-path/project.qbs (renamed from tests/auto/language/testdata/erroneous/conflicting-module-instances-in-search-paths/project.qbs)1
-rw-r--r--tests/auto/language/tst_language.cpp40
-rw-r--r--tests/auto/language/tst_language.h2
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();