diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2018-06-20 15:43:59 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2018-06-25 09:15:34 +0000 |
commit | fbbd436bf1aea9522456f0a99196fa724b7c951c (patch) | |
tree | 08dc269cd8fefef60051dc837da4ff3483e608c4 /tests/auto/language/tst_language.cpp | |
parent | 10c7da071f1dcf2f3fcc7b1c970b3cff7f376a65 (diff) | |
download | qbs-fbbd436bf1aea9522456f0a99196fa724b7c951c.tar.gz |
Properly diagnose invalid module property assignments
... if the non-existing module name has more than one component. We
inadvertantly skipped the check in that case.
Task-number: QBS-1362
Change-Id: I1fcababee1ea70c3133bd1b1c8f8f32f8450a0e8
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'tests/auto/language/tst_language.cpp')
-rw-r--r-- | tests/auto/language/tst_language.cpp | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/tests/auto/language/tst_language.cpp b/tests/auto/language/tst_language.cpp index 4d24e773b..3c4637018 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; |