aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/qml/qqmlqt
diff options
context:
space:
mode:
authorFabian Kosmale <fabian.kosmale@qt.io>2020-01-28 16:26:49 +0100
committerFabian Kosmale <fabian.kosmale@qt.io>2020-01-30 09:51:44 +0100
commitc5f78add12b7d33926631b6df79599df18f65068 (patch)
tree08a895aa76440a4b267b1f6f500ea11e2722e19d /tests/auto/qml/qqmlqt
parente080f48f905be597b1a645f1641b2b06553df6a2 (diff)
Reduce Qt Declarative's use of QDateTime's locale-dependent APIs
[ChangeLog][QtQml] Qt.formatDateTime, Qt.formatDate and Qt.formatTime now support formatting according to a locale and an optional locale format type. If locale dependent formatting is desired, this method should be used instead of the locale-related DateFormat enum members. Fixes: QTBUG-81631 Change-Id: I971231644ebbeaccbf54dd8f036adf4d31547301 Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Diffstat (limited to 'tests/auto/qml/qqmlqt')
-rw-r--r--tests/auto/qml/qqmlqt/data/formattingLocale.qml12
-rw-r--r--tests/auto/qml/qqmlqt/tst_qqmlqt.cpp52
2 files changed, 52 insertions, 12 deletions
diff --git a/tests/auto/qml/qqmlqt/data/formattingLocale.qml b/tests/auto/qml/qqmlqt/data/formattingLocale.qml
new file mode 100644
index 0000000000..9da349b101
--- /dev/null
+++ b/tests/auto/qml/qqmlqt/data/formattingLocale.qml
@@ -0,0 +1,12 @@
+import QtQml 2.15
+
+QtObject {
+ required property var myDateTime
+ required property var myDate
+ property var myTime
+
+ property string dateTimeString: Qt.formatDateTime(myDateTime, Qt.locale("de_DE"), Locale.NarrowFormat)
+ property string dateString: Qt.formatDate(myDate, Qt.locale("de_DE"))
+
+ function invalidUsage() { Qt.formatTime(myTime, null, "hello") }
+}
diff --git a/tests/auto/qml/qqmlqt/tst_qqmlqt.cpp b/tests/auto/qml/qqmlqt/tst_qqmlqt.cpp
index 15ef31464b..1a54397f1a 100644
--- a/tests/auto/qml/qqmlqt/tst_qqmlqt.cpp
+++ b/tests/auto/qml/qqmlqt/tst_qqmlqt.cpp
@@ -91,6 +91,7 @@ private slots:
void dateTimeFormatting_data();
void dateTimeFormattingVariants();
void dateTimeFormattingVariants_data();
+ void dateTimeFormattingWithLocale();
void isQtObject();
void btoa();
void atob();
@@ -780,12 +781,12 @@ void tst_qqmlqt::dateTimeFormatting()
QQmlComponent component(&eng, testFileUrl("formatting.qml"));
QStringList warnings;
- warnings << component.url().toString() + ":37: Error: Qt.formatDate(): Invalid date format"
- << component.url().toString() + ":36: Error: Qt.formatDate(): Invalid arguments"
- << component.url().toString() + ":40: Error: Qt.formatTime(): Invalid time format"
- << component.url().toString() + ":39: Error: Qt.formatTime(): Invalid arguments"
- << component.url().toString() + ":43: Error: Qt.formatDateTime(): Invalid datetime format"
- << component.url().toString() + ":42: Error: Qt.formatDateTime(): Invalid arguments";
+ warnings << component.url().toString() + ":37: Error: Qt.formatDate(): Bad second argument (must be either string, number or locale)"
+ << component.url().toString() + ":36: Error: Qt.formatDate(): Missing argument"
+ << component.url().toString() + ":40: Error: Qt.formatTime(): Bad second argument (must be either string, number or locale)"
+ << component.url().toString() + ":39: Error: Qt.formatTime(): Missing argument"
+ << component.url().toString() + ":43: Error: Qt.formatDateTime(): Bad second argument (must be either string, number or locale)"
+ << component.url().toString() + ":42: Error: Qt.formatDateTime(): Missing argument";
foreach (const QString &warning, warnings)
QTest::ignoreMessage(QtWarningMsg, qPrintable(warning));
@@ -815,6 +816,8 @@ void tst_qqmlqt::dateTimeFormatting()
void tst_qqmlqt::dateTimeFormatting_data()
{
+ QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED
+ // Test intentionally uses deprecated enumerators from Qt::DateFormat
QTest::addColumn<QString>("method");
QTest::addColumn<QStringList>("inputProperties");
QTest::addColumn<QStringList>("expectedResults");
@@ -844,6 +847,7 @@ void tst_qqmlqt::dateTimeFormatting_data()
<< (QStringList() << dateTime.toString(Qt::DefaultLocaleShortDate)
<< dateTime.toString(Qt::DefaultLocaleLongDate)
<< dateTime.toString("M/d/yy H:m:s a"));
+ QT_WARNING_POP
}
void tst_qqmlqt::dateTimeFormattingVariants()
@@ -856,12 +860,12 @@ void tst_qqmlqt::dateTimeFormattingVariants()
QQmlComponent component(&eng, testFileUrl("formatting.qml"));
QStringList warnings;
- warnings << component.url().toString() + ":37: Error: Qt.formatDate(): Invalid date format"
- << component.url().toString() + ":36: Error: Qt.formatDate(): Invalid arguments"
- << component.url().toString() + ":40: Error: Qt.formatTime(): Invalid time format"
- << component.url().toString() + ":39: Error: Qt.formatTime(): Invalid arguments"
- << component.url().toString() + ":43: Error: Qt.formatDateTime(): Invalid datetime format"
- << component.url().toString() + ":42: Error: Qt.formatDateTime(): Invalid arguments";
+ warnings << component.url().toString() + ":37: Error: Qt.formatDate(): Bad second argument (must be either string, number or locale)"
+ << component.url().toString() + ":36: Error: Qt.formatDate(): Missing argument"
+ << component.url().toString() + ":40: Error: Qt.formatTime(): Bad second argument (must be either string, number or locale)"
+ << component.url().toString() + ":39: Error: Qt.formatTime(): Missing argument"
+ << component.url().toString() + ":43: Error: Qt.formatDateTime(): Bad second argument (must be either string, number or locale)"
+ << component.url().toString() + ":42: Error: Qt.formatDateTime(): Missing argument";
foreach (const QString &warning, warnings)
QTest::ignoreMessage(QtWarningMsg, qPrintable(warning));
@@ -882,6 +886,8 @@ void tst_qqmlqt::dateTimeFormattingVariants()
void tst_qqmlqt::dateTimeFormattingVariants_data()
{
+ QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED
+ // Test intentionally uses deprecated enumerators from Qt::DateFormat
QTest::addColumn<QString>("method");
QTest::addColumn<QVariant>("variant");
QTest::addColumn<QStringList>("expectedResults");
@@ -922,6 +928,28 @@ void tst_qqmlqt::dateTimeFormattingVariants_data()
QTest::newRow("formatDate, int") << "formatDate" << QVariant::fromValue(integer) << (QStringList() << temporary.date().toString(Qt::DefaultLocaleShortDate) << temporary.date().toString(Qt::DefaultLocaleLongDate) << temporary.date().toString("ddd MMMM d yy"));
QTest::newRow("formatDateTime, int") << "formatDateTime" << QVariant::fromValue(integer) << (QStringList() << temporary.toString(Qt::DefaultLocaleShortDate) << temporary.toString(Qt::DefaultLocaleLongDate) << temporary.toString("M/d/yy H:m:s a"));
QTest::newRow("formatTime, int") << "formatTime" << QVariant::fromValue(integer) << (QStringList() << temporary.time().toString(Qt::DefaultLocaleShortDate) << temporary.time().toString(Qt::DefaultLocaleLongDate) << temporary.time().toString("H:m:s a") << temporary.time().toString("hh:mm:ss.zzz"));
+ QT_WARNING_POP
+}
+
+void tst_qqmlqt::dateTimeFormattingWithLocale()
+{
+ QQmlEngine engine;
+ auto url = testFileUrl("formattingLocale.qml");
+ QQmlComponent comp(&engine, url);
+ QDateTime dateTime = QDateTime::fromString("M1d1y9800:01:02",
+ "'M'M'd'd'y'yyhh:mm:ss");
+ QDate date(1995, 5, 17);
+ QScopedPointer<QObject> o(comp.createWithInitialProperties({ {"myDateTime", dateTime}, {"myDate", date} }));
+ QVERIFY(!o.isNull());
+
+ auto dateTimeString = o->property("dateTimeString").toString();
+ QCOMPARE(dateTimeString, QLocale("de_DE").toString(dateTime, QLocale::NarrowFormat));
+ auto dateString = o->property("dateString").toString();
+ QCOMPARE(dateString, QLocale("de_DE").toString(date, QLocale::ShortFormat));
+
+ QString warningMsg = url.toString() + QLatin1String(":11: Error: Qt.formatTime(): Third argument must be a Locale format option");
+ QTest::ignoreMessage(QtMsgType::QtWarningMsg, warningMsg.toUtf8().constData());
+ QMetaObject::invokeMethod(o.get(), "invalidUsage");
}
void tst_qqmlqt::isQtObject()