diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2018-06-29 10:44:52 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2018-06-29 10:44:52 +0200 |
commit | 5821d32afc9eb44359ce6934d8c6d25afd7088d9 (patch) | |
tree | a535076493e87cab9b3c3dce495baa562ebee18a /tests/auto/language | |
parent | 07bf66a03e775aeb9f46f46204e6633398b650a5 (diff) | |
parent | 872e4b883d7732c46e1e5d32b60ce698862e5da6 (diff) |
Merge 1.12 into master
Change-Id: Ieaf617a09ed16cf0c81ea7621d4d0ba23741fbfa
Diffstat (limited to 'tests/auto/language')
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(); |