From f3edb627dc0cf780a593765babde59e1194aa9eb Mon Sep 17 00:00:00 2001
From: Alex Blasche <alexander.blasche@digia.com>
Date: Tue, 23 Sep 2014 12:28:41 +0200
Subject: [PATCH] Fix DeclarativePlace unit test

This broke due to a behavior change in QtDeclarative when converting
JS Array to C++. For more details see QTBUG-40431.

Change-Id: Id666b4872a5cd1e435cca67b5362c2ab3beb3633
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
---
 .../location/declarativeplaces/qdeclarativeplace.cpp      | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/imports/location/declarativeplaces/qdeclarativeplace.cpp b/src/imports/location/declarativeplaces/qdeclarativeplace.cpp
index 0b755b195..05fa3d012 100644
--- a/src/imports/location/declarativeplaces/qdeclarativeplace.cpp
+++ b/src/imports/location/declarativeplaces/qdeclarativeplace.cpp
@@ -1203,14 +1203,18 @@ QPlaceManager *QDeclarativePlace::manager()
 */
 QString QDeclarativePlace::primaryValue(const QString &contactType) const
 {
-    if (m_contactDetails->value(contactType).userType() == QVariant::List) {
+    QVariant value = m_contactDetails->value(contactType);
+    if (value.userType() == qMetaTypeId<QJSValue>())
+        value = value.value<QJSValue>().toVariant();
+
+    if (value.userType() == QVariant::List) {
         QVariantList detailList = m_contactDetails->value(contactType).toList();
         if (!detailList.isEmpty()) {
             QDeclarativeContactDetail *primaryDetail = qobject_cast<QDeclarativeContactDetail *>(detailList.at(0).value<QObject *>());
             if (primaryDetail)
                 return primaryDetail->value();
         }
-    } else if (m_contactDetails->value(contactType).userType() == QMetaType::QObjectStar) {
+    } else if (value.userType() == QMetaType::QObjectStar) {
         QDeclarativeContactDetail *primaryDetail = qobject_cast<QDeclarativeContactDetail *>(m_contactDetails->value(contactType).value<QObject *>());
         if (primaryDetail)
             return primaryDetail->value();
-- 
GitLab