aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/language
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2018-06-29 10:44:52 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2018-06-29 10:44:52 +0200
commit5821d32afc9eb44359ce6934d8c6d25afd7088d9 (patch)
treea535076493e87cab9b3c3dce495baa562ebee18a /tests/auto/language
parent07bf66a03e775aeb9f46f46204e6633398b650a5 (diff)
parent872e4b883d7732c46e1e5d32b60ce698862e5da6 (diff)
Merge 1.12 into master
Diffstat (limited to 'tests/auto/language')
-rw-r--r--tests/auto/language/testdata/dotted-names/dotted-names.qbs24
-rw-r--r--tests/auto/language/testdata/dotted-names/modules/x/y/xy.qbs5
-rw-r--r--tests/auto/language/testdata/erroneous/original-in-export-item2.qbs14
-rw-r--r--tests/auto/language/testdata/erroneous/original-in-export-item3.qbs17
-rw-r--r--tests/auto/language/tst_language.cpp51
-rw-r--r--tests/auto/language/tst_language.h2
6 files changed, 113 insertions, 0 deletions
diff --git a/tests/auto/language/testdata/dotted-names/dotted-names.qbs b/tests/auto/language/testdata/dotted-names/dotted-names.qbs
new file mode 100644
index 000000000..cf5658384
--- /dev/null
+++ b/tests/auto/language/testdata/dotted-names/dotted-names.qbs
@@ -0,0 +1,24 @@
+import qbs
+
+Project {
+ name: "theProject"
+ property bool includeDottedProduct
+ property bool includeDottedModule
+
+ Project {
+ condition: project.includeDottedProduct
+ Product {
+ name: "a.b"
+ Export { property string c: "default" }
+ }
+ }
+
+ Product {
+ name: "p"
+ Depends { name: "a.b"; condition: project.includeDottedProduct }
+ Depends { name: "x.y"; condition: project.includeDottedModule }
+ a.b.c: "p"
+ x.y.z: "p"
+ }
+}
+
diff --git a/tests/auto/language/testdata/dotted-names/modules/x/y/xy.qbs b/tests/auto/language/testdata/dotted-names/modules/x/y/xy.qbs
new file mode 100644
index 000000000..71cfac9cb
--- /dev/null
+++ b/tests/auto/language/testdata/dotted-names/modules/x/y/xy.qbs
@@ -0,0 +1,5 @@
+import qbs
+
+Module {
+ property string z: "default"
+}
diff --git a/tests/auto/language/testdata/erroneous/original-in-export-item2.qbs b/tests/auto/language/testdata/erroneous/original-in-export-item2.qbs
new file mode 100644
index 000000000..d932d4aee
--- /dev/null
+++ b/tests/auto/language/testdata/erroneous/original-in-export-item2.qbs
@@ -0,0 +1,14 @@
+import qbs
+
+Project {
+ Product {
+ name: "a"
+ Export {
+ x.y.z: original
+ }
+ }
+ Product {
+ name: "b"
+ Depends { name: "a" }
+ }
+}
diff --git a/tests/auto/language/testdata/erroneous/original-in-export-item3.qbs b/tests/auto/language/testdata/erroneous/original-in-export-item3.qbs
new file mode 100644
index 000000000..d7bcb322e
--- /dev/null
+++ b/tests/auto/language/testdata/erroneous/original-in-export-item3.qbs
@@ -0,0 +1,17 @@
+import qbs
+
+Project {
+ Product {
+ name: "a"
+ Export {
+ Properties {
+ condition: true
+ x.y.z: original
+ }
+ }
+ }
+ Product {
+ name: "b"
+ Depends { name: "a" }
+ }
+}
diff --git a/tests/auto/language/tst_language.cpp b/tests/auto/language/tst_language.cpp
index c17526ad8..fce799a0f 100644
--- a/tests/auto/language/tst_language.cpp
+++ b/tests/auto/language/tst_language.cpp
@@ -581,6 +581,50 @@ void TestLanguage::disabledSubProject()
QCOMPARE(exceptionCaught, false);
}
+void TestLanguage::dottedNames_data()
+{
+ QTest::addColumn<bool>("useProduct");
+ QTest::addColumn<bool>("useModule");
+ QTest::addColumn<bool>("expectSuccess");
+ QTest::addColumn<QString>("expectedErrorMessage");
+ QTest::newRow("missing product dependency") << false << true << false
+ << QString("Item 'a.b' is not declared. Did you forget to add a Depends item");
+ QTest::newRow("missing module dependency") << true << false << false
+ << QString("Item 'x.y' is not declared. Did you forget to add a Depends item");
+ QTest::newRow("missing both dependencies") << false << false << false << QString();
+ QTest::newRow("ok") << true << true << true << QString();
+}
+
+void TestLanguage::dottedNames()
+{
+ QFETCH(bool, expectSuccess);
+ try {
+ SetupProjectParameters params = defaultParameters;
+ params.setProjectFilePath(testProject("dotted-names/dotted-names.qbs"));
+ QFETCH(bool, useProduct);
+ QFETCH(bool, useModule);
+ const QVariantMap overridden{
+ std::make_pair("projects.theProject.includeDottedProduct", useProduct),
+ std::make_pair("projects.theProject.includeDottedModule", useModule)
+ };
+ params.setOverriddenValues(overridden);
+ TopLevelProjectPtr project = loader->loadProject(params);
+ QVERIFY(expectSuccess);
+ QVERIFY(!!project);
+ QHash<QString, ResolvedProductPtr> products = productsFromProject(project);
+ QCOMPARE(products.size(), useProduct ? 2 : 1);
+ const ResolvedProductPtr product = products.value("p");
+ QVERIFY(!!product);
+ QCOMPARE(product->moduleProperties->moduleProperty("a.b", "c").toString(), QString("p"));
+ QCOMPARE(product->moduleProperties->moduleProperty("x.y", "z").toString(), QString("p"));
+ } catch (const ErrorInfo &e) {
+ QVERIFY(!expectSuccess);
+ QFETCH(QString, expectedErrorMessage);
+ if (!expectedErrorMessage.isEmpty())
+ QVERIFY2(e.toString().contains(expectedErrorMessage), qPrintable(e.toString()));
+ }
+}
+
void TestLanguage::emptyJsFile()
{
bool exceptionCaught = false;
@@ -839,6 +883,12 @@ void TestLanguage::erroneousFiles_data()
QTest::newRow("original-in-export-item")
<< "original-in-export-item.qbs:7:32.*The special value 'original' cannot be used "
"on the right-hand side of a property declaration.";
+ QTest::newRow("original-in-export-item2")
+ << "original-in-export-item2.qbs:6:9.*Item 'x.y' is not declared. Did you forget "
+ "to add a Depends item";
+ QTest::newRow("original-in-export-item3")
+ << "original-in-export-item3.qbs:6:9.*Item 'x.y' is not declared. Did you forget "
+ "to add a Depends item";
QTest::newRow("mismatching-multiplex-dependency")
<< "mismatching-multiplex-dependency.qbs:7:5.*Dependency from product "
"'b \\{\"architecture\":\"mips\"\\}' to product 'a \\{\"architecture\":\"mips\"\\}'"
@@ -868,6 +918,7 @@ void TestLanguage::erroneousFiles()
return;
}
QEXPECT_FAIL("undeclared_property_in_Properties_item", "Too expensive to check", Continue);
+ QEXPECT_FAIL("original-in-export-item3", "Too expensive to check", Continue);
QVERIFY(!"No error thrown on invalid input.");
}
diff --git a/tests/auto/language/tst_language.h b/tests/auto/language/tst_language.h
index aab04ca29..18027ab45 100644
--- a/tests/auto/language/tst_language.h
+++ b/tests/auto/language/tst_language.h
@@ -91,6 +91,8 @@ private slots:
void dependencyOnAllProfiles();
void derivedSubProject();
void disabledSubProject();
+ void dottedNames_data();
+ void dottedNames();
void emptyJsFile();
void enumerateProjectProperties();
void environmentVariable();