Don't consider QLocale a value type.
authorMitch Curtis <mitch.curtis@theqtcompany.com>
Tue, 25 Aug 2015 13:43:56 +0000 (15:43 +0200)
committerMitch Curtis <mitch.curtis@theqtcompany.com>
Wed, 2 Sep 2015 13:35:03 +0000 (13:35 +0000)
This fixes a regression where all of the properties of
Qt.inputMethod.locale were undefined.

Change-Id: Id33890a78296709baad6aeda96d74ca8cb39c61d
Task-number: QTBUG-47916
Reviewed-by: Mitch Curtis <mitch.curtis@theqtcompany.com>
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
src/qml/qml/qqmlvaluetype.cpp
tests/auto/qml/qqmlvaluetypes/data/locale_read.qml [new file with mode: 0644]
tests/auto/qml/qqmlvaluetypes/tst_qqmlvaluetypes.cpp

index 10eaae0..6825e5f 100644 (file)
@@ -82,7 +82,8 @@ bool QQmlValueTypeFactoryImpl::isValueType(int idx)
             && idx != QVariant::StringList
             && idx != QMetaType::QObjectStar
             && idx != QMetaType::VoidStar
-            && idx != QMetaType::QVariant) {
+            && idx != QMetaType::QVariant
+            && idx != QMetaType::QLocale) {
         return true;
     }
 
diff --git a/tests/auto/qml/qqmlvaluetypes/data/locale_read.qml b/tests/auto/qml/qqmlvaluetypes/data/locale_read.qml
new file mode 100644 (file)
index 0000000..5ae6b41
--- /dev/null
@@ -0,0 +1,22 @@
+import QtQuick 2.0
+
+Item {
+    property string amText: Qt.inputMethod.locale.amText
+    property string decimalPoint: Qt.inputMethod.locale.decimalPoint
+    property string exponential: Qt.inputMethod.locale.exponential
+    property int firstDayOfWeek: Qt.inputMethod.locale.firstDayOfWeek
+    property string groupSeparator: Qt.inputMethod.locale.groupSeparator
+    property int measurementSystem: Qt.inputMethod.locale.measurementSystem
+    property string name: Qt.inputMethod.locale.name
+    property string nativeCountryName: Qt.inputMethod.locale.nativeCountryName
+    property string nativeLanguageName: Qt.inputMethod.locale.nativeLanguageName
+    property string negativeSign: Qt.inputMethod.locale.negativeSign
+    property string percent: Qt.inputMethod.locale.percent
+    property string pmText: Qt.inputMethod.locale.pmText
+    property string positiveSign: Qt.inputMethod.locale.positiveSign
+    property int textDirection: Qt.inputMethod.locale.textDirection
+    property var uiLanguages: Qt.inputMethod.locale.uiLanguages
+    property var weekDays: Qt.inputMethod.locale.weekDays
+    property string zeroDigit: Qt.inputMethod.locale.zeroDigit
+}
+
index 578004b..f93190c 100644 (file)
@@ -36,6 +36,7 @@
 #include <QQmlComponent>
 #include <QDebug>
 #include <private/qquickvaluetypes_p.h>
+#include <private/qqmlglobal_p.h>
 #include "../../shared/util.h"
 #include "testtypes.h"
 
@@ -67,6 +68,7 @@ private slots:
     void font();
     void color();
     void variant();
+    void locale();
 
     void bindingAssignment();
     void bindingRead();
@@ -316,6 +318,42 @@ void tst_qqmlvaluetypes::variant()
     }
 }
 
+void tst_qqmlvaluetypes::locale()
+{
+    {
+        QQmlComponent component(&engine, testFileUrl("locale_read.qml"));
+        QScopedPointer<QObject> object(component.create());
+        QVERIFY(!object.isNull());
+
+        QVERIFY(QQml_guiProvider()->inputMethod());
+        QInputMethod *inputMethod = qobject_cast<QInputMethod*>(QQml_guiProvider()->inputMethod());
+        QLocale locale = inputMethod->locale();
+
+        QCOMPARE(object->property("amText").toString(), locale.amText());
+        QCOMPARE(object->property("decimalPoint").toString().at(0), locale.decimalPoint());
+        QCOMPARE(object->property("exponential").toString().at(0), locale.exponential());
+        // Sunday is 0 in JavaScript.
+        QCOMPARE(object->property("firstDayOfWeek").toInt(), int(locale.firstDayOfWeek() == Qt::Sunday ? 0 : locale.firstDayOfWeek()));
+        QCOMPARE(object->property("groupSeparator").toString().at(0), locale.groupSeparator());
+        QCOMPARE(object->property("measurementSystem").toInt(), int(locale.measurementSystem()));
+        QCOMPARE(object->property("name").toString(), locale.name());
+        QCOMPARE(object->property("nativeCountryName").toString(), locale.nativeCountryName());
+        QCOMPARE(object->property("nativeLanguageName").toString(), locale.nativeLanguageName());
+        QCOMPARE(object->property("negativeSign").toString().at(0), locale.negativeSign());
+        QCOMPARE(object->property("percent").toString().at(0), locale.percent());
+        QCOMPARE(object->property("pmText").toString(), locale.pmText());
+        QCOMPARE(object->property("positiveSign").toString().at(0), locale.positiveSign());
+        QCOMPARE(object->property("textDirection").toInt(), int(locale.textDirection()));
+        QCOMPARE(object->property("uiLanguages").toStringList(), locale.uiLanguages());
+        QList<Qt::DayOfWeek> weekDays;
+        foreach (const QVariant &weekDay, object->property("weekDays").toList()) {
+            weekDays.append(Qt::DayOfWeek(weekDay.toInt()));
+        }
+        QCOMPARE(weekDays, locale.weekdays());
+        QCOMPARE(object->property("zeroDigit").toString().at(0), locale.zeroDigit());
+    }
+}
+
 void tst_qqmlvaluetypes::sizereadonly()
 {
     {