summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@digia.com>2013-07-18 15:50:50 +0200
committerChristian Kandeler <christian.kandeler@digia.com>2013-07-19 10:45:01 +0200
commit928ae698e534efa92270a8e69d3e49bacb491faf (patch)
treee43e4bcbb8576751bdf7e2311b64a8a3a34e1a34
parent8a059586cc109f97b2cfc456cb4262009191ce2b (diff)
downloadqbs-928ae698e534efa92270a8e69d3e49bacb491faf.tar.gz
fix overriding of stringList properties
Task-number: QBS-369 Change-Id: I602551ed740a81279412cc631c5e35f601a46903 Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
-rw-r--r--src/lib/language/moduleloader.cpp5
-rw-r--r--src/lib/language/testdata/buildconfigstringlistsyntax.qbs3
-rw-r--r--src/lib/language/tst_language.cpp20
-rw-r--r--src/lib/language/tst_language.h1
4 files changed, 29 insertions, 0 deletions
diff --git a/src/lib/language/moduleloader.cpp b/src/lib/language/moduleloader.cpp
index a2541717c..20e611d9b 100644
--- a/src/lib/language/moduleloader.cpp
+++ b/src/lib/language/moduleloader.cpp
@@ -690,6 +690,11 @@ static QVariant convertToPropertyType(const QVariant &v, PropertyDeclaration::Ty
const QVariant::Type vt = variantType(t);
if (vt == QVariant::Invalid)
return v;
+
+ // Handle the foo,bar,bla stringlist syntax.
+ if (t == PropertyDeclaration::StringList && v.type() == QVariant::String)
+ return v.toString().split(QLatin1Char(','));
+
QVariant c = v;
if (!c.convert(vt)) {
QStringList name = namePrefix;
diff --git a/src/lib/language/testdata/buildconfigstringlistsyntax.qbs b/src/lib/language/testdata/buildconfigstringlistsyntax.qbs
new file mode 100644
index 000000000..623919317
--- /dev/null
+++ b/src/lib/language/testdata/buildconfigstringlistsyntax.qbs
@@ -0,0 +1,3 @@
+Project {
+ property stringList someStrings
+}
diff --git a/src/lib/language/tst_language.cpp b/src/lib/language/tst_language.cpp
index 15d426eec..5d75ac339 100644
--- a/src/lib/language/tst_language.cpp
+++ b/src/lib/language/tst_language.cpp
@@ -169,6 +169,26 @@ void TestLanguage::baseProperty()
QCOMPARE(exceptionCaught, false);
}
+void TestLanguage::buildConfigStringListSyntax()
+{
+ bool exceptionCaught = false;
+ try {
+ SetupProjectParameters parameters = defaultParameters;
+ QVariantMap overriddenValues;
+ overriddenValues.insert("project.someStrings", "foo,bar,baz");
+ parameters.setOverriddenValues(overriddenValues);
+ parameters.setProjectFilePath(testProject("buildconfigstringlistsyntax.qbs"));
+ project = loader->loadProject(parameters);
+ QVERIFY(project);
+ QCOMPARE(project->projectProperties().value("someStrings").toStringList(),
+ QStringList() << "foo" << "bar" << "baz");
+ } catch (const ErrorInfo &e) {
+ exceptionCaught = true;
+ qDebug() << e.toString();
+ }
+ QCOMPARE(exceptionCaught, false);
+}
+
void TestLanguage::conditionalDepends()
{
bool exceptionCaught = false;
diff --git a/src/lib/language/tst_language.h b/src/lib/language/tst_language.h
index 67193308b..0f1fffe06 100644
--- a/src/lib/language/tst_language.h
+++ b/src/lib/language/tst_language.h
@@ -67,6 +67,7 @@ private slots:
void cleanupTestCase();
void baseProperty();
+ void buildConfigStringListSyntax();
void conditionalDepends();
void environmentVariable();
void erroneousFiles_data();