1 /****************************************************************************
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: http://www.qt-project.org/
7 ** This file is part of the test suite of the Qt Toolkit.
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** GNU Lesser General Public License Usage
11 ** This file may be used under the terms of the GNU Lesser General Public
12 ** License version 2.1 as published by the Free Software Foundation and
13 ** appearing in the file LICENSE.LGPL included in the packaging of this
14 ** file. Please review the following information to ensure the GNU Lesser
15 ** General Public License version 2.1 requirements will be met:
16 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
18 ** In addition, as a special exception, Nokia gives you certain additional
19 ** rights. These rights are described in the Nokia Qt LGPL Exception
20 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
22 ** GNU General Public License Usage
23 ** Alternatively, this file may be used under the terms of the GNU General
24 ** Public License version 3.0 as published by the Free Software Foundation
25 ** and appearing in the file LICENSE.GPL included in the packaging of this
26 ** file. Please review the following information to ensure the GNU General
27 ** Public License version 3.0 requirements will be met:
28 ** http://www.gnu.org/copyleft/gpl.html.
31 ** Alternatively, this file may be used in accordance with the terms and
32 ** conditions contained in a signed written agreement between you and Nokia.
40 ****************************************************************************/
44 #include <QtDeclarative/qdeclarativeengine.h>
45 #include <QtDeclarative/qdeclarativecomponent.h>
46 #include <QtCore/QDateTime>
48 #include "../../shared/util.h"
50 class tst_qdeclarativelocale : public QDeclarativeDataTest
54 tst_qdeclarativelocale() { }
59 void properties_data();
61 void currencySymbol_data();
62 void currencySymbol();
63 void monthName_data();
65 void standaloneMonthName_data();
66 void standaloneMonthName();
69 void standaloneDayName_data();
70 void standaloneDayName();
73 void dateFormat_data();
75 void dateTimeFormat_data();
76 void dateTimeFormat();
77 void timeFormat_data();
80 void dateToLocaleString_data();
81 void dateToLocaleString();
82 void dateToLocaleStringFormatted_data();
83 void dateToLocaleStringFormatted();
84 void dateToLocaleDateString_data();
85 void dateToLocaleDateString();
86 void dateToLocaleDateStringFormatted_data();
87 void dateToLocaleDateStringFormatted();
88 void dateToLocaleTimeString_data();
89 void dateToLocaleTimeString();
90 void dateToLocaleTimeStringFormatted_data();
91 void dateToLocaleTimeStringFormatted();
92 void dateFromLocaleString_data();
93 void dateFromLocaleString();
94 void dateFromLocaleDateString_data();
95 void dateFromLocaleDateString();
96 void dateFromLocaleTimeString_data();
97 void dateFromLocaleTimeString();
99 void numberToLocaleString_data();
100 void numberToLocaleString();
101 void numberToLocaleCurrencyString_data();
102 void numberToLocaleCurrencyString();
103 void numberFromLocaleString_data();
104 void numberFromLocaleString();
105 void numberConstToLocaleString();
108 void addPropertyData(const QString &l);
109 QVariant getProperty(QObject *obj, const QString &locale, const QString &property);
110 void addCurrencySymbolData(const QString &locale);
111 void addStandardFormatData();
112 void addFormatNameData(const QString &locale);
113 void addDateTimeFormatData(const QString &l);
114 void addDateFormatData(const QString &l);
115 void addTimeFormatData(const QString &l);
116 QDeclarativeEngine engine;
119 void tst_qdeclarativelocale::defaultLocale()
121 QDeclarativeComponent c(&engine, testFileUrl("properties.qml"));
123 QObject *obj = c.create();
126 QCOMPARE(obj->property("name").toString(), QLocale().name());
129 #define LOCALE_PROP(type,prop) { #prop, QVariant(type(qlocale.prop())) }
131 void tst_qdeclarativelocale::addPropertyData(const QString &l)
140 LOCALE_PROP(QString,name),
141 LOCALE_PROP(QString,amText),
142 LOCALE_PROP(QString,pmText),
143 LOCALE_PROP(QString,nativeLanguageName),
144 LOCALE_PROP(QString,nativeCountryName),
145 LOCALE_PROP(QString,decimalPoint),
146 LOCALE_PROP(QString,groupSeparator),
147 LOCALE_PROP(QString,percent),
148 LOCALE_PROP(QString,zeroDigit),
149 LOCALE_PROP(QString,negativeSign),
150 LOCALE_PROP(QString,positiveSign),
151 LOCALE_PROP(QString,exponential),
152 LOCALE_PROP(int,firstDayOfWeek),
153 LOCALE_PROP(int,measurementSystem),
154 LOCALE_PROP(int,textDirection),
159 while (values[i].name) {
160 QByteArray n = l.toLatin1() + ':' + values[i].name;
161 QTest::newRow(n.constData()) << l << QByteArray(values[i].name) << values[i].value;
166 void tst_qdeclarativelocale::properties_data()
168 QTest::addColumn<QString>("locale");
169 QTest::addColumn<QByteArray>("property");
170 QTest::addColumn<QVariant>("value");
172 addPropertyData("en_US");
173 addPropertyData("de_DE");
174 addPropertyData("ar_SA");
175 addPropertyData("hi_IN");
176 addPropertyData("zh_CN");
177 addPropertyData("th_TH");
180 void tst_qdeclarativelocale::properties()
182 QFETCH(QString, locale);
183 QFETCH(QByteArray, property);
184 QFETCH(QVariant, value);
186 QDeclarativeComponent c(&engine, testFileUrl("properties.qml"));
188 QObject *obj = c.create();
191 QMetaObject::invokeMethod(obj, "setLocale", Qt::DirectConnection,
192 Q_ARG(QVariant, QVariant(locale)));
194 QCOMPARE(obj->property(property), value);
199 void tst_qdeclarativelocale::addCurrencySymbolData(const QString &l)
201 QByteArray locale = l.toLatin1();
202 QTest::newRow(locale.constData()) << l << -1;
203 QByteArray t(locale);
204 t += " CurrencyIsoCode";
205 QTest::newRow(t.constData()) << l << (int)QLocale::CurrencyIsoCode;
206 t = locale + " CurrencySymbol";
207 QTest::newRow(t.constData()) << l << (int)QLocale::CurrencySymbol;
208 t = locale + " CurrencyDisplayName";
209 QTest::newRow(t.constData()) << l << (int)QLocale::CurrencyDisplayName;
212 void tst_qdeclarativelocale::currencySymbol_data()
214 QTest::addColumn<QString>("locale");
215 QTest::addColumn<int>("param");
217 addCurrencySymbolData("en_US");
218 addCurrencySymbolData("de_DE");
219 addCurrencySymbolData("ar_SA");
220 addCurrencySymbolData("hi_IN");
221 addCurrencySymbolData("zh_CN");
222 addCurrencySymbolData("th_TH");
225 void tst_qdeclarativelocale::currencySymbol()
227 QFETCH(QString, locale);
230 QDeclarativeComponent c(&engine, testFileUrl("functions.qml"));
232 QObject *obj = c.create();
237 QLocale::CurrencySymbolFormat format = QLocale::CurrencySymbol;
240 format = QLocale::CurrencySymbolFormat(param);
242 QMetaObject::invokeMethod(obj, "setLocale", Qt::DirectConnection,
243 Q_ARG(QVariant, QVariant(locale)));
245 QMetaObject::invokeMethod(obj, "currencySymbol", Qt::DirectConnection,
246 Q_RETURN_ARG(QVariant, val),
247 Q_ARG(QVariant, QVariant(int(format))));
249 QCOMPARE(val.toString(), l.currencySymbol(format));
254 void tst_qdeclarativelocale::addFormatNameData(const QString &l)
256 QByteArray locale = l.toLatin1();
257 QTest::newRow(locale.constData()) << l << -1;
258 QByteArray t(locale);
260 QTest::newRow(t.constData()) << l << (int)QLocale::LongFormat;
261 t = locale + " ShortFormat";
262 QTest::newRow(t.constData()) << l << (int)QLocale::ShortFormat;
263 t = locale + " NarrowFormat";
264 QTest::newRow(t.constData()) << l << (int)QLocale::NarrowFormat;
267 void tst_qdeclarativelocale::addStandardFormatData()
269 QTest::addColumn<QString>("locale");
270 QTest::addColumn<int>("param");
272 addFormatNameData("en_US");
273 addFormatNameData("de_DE");
274 addFormatNameData("ar_SA");
275 addFormatNameData("hi_IN");
276 addFormatNameData("zh_CN");
277 addFormatNameData("th_TH");
280 void tst_qdeclarativelocale::monthName_data()
282 addStandardFormatData();
285 void tst_qdeclarativelocale::monthName()
287 QFETCH(QString, locale);
290 QDeclarativeComponent c(&engine, testFileUrl("functions.qml"));
292 QObject *obj = c.create();
297 QLocale::FormatType format = QLocale::LongFormat;
299 format = QLocale::FormatType(param);
301 QMetaObject::invokeMethod(obj, "setLocale", Qt::DirectConnection,
302 Q_ARG(QVariant, QVariant(locale)));
304 for (int i = 0; i <= 11; ++i) {
305 QMetaObject::invokeMethod(obj, "monthName", Qt::DirectConnection,
306 Q_RETURN_ARG(QVariant, val),
307 Q_ARG(QVariant, QVariant(i)),
308 Q_ARG(QVariant, QVariant(int(format))));
310 // QLocale January == 1, JS Date January == 0
311 QCOMPARE(val.toString(), l.monthName(i+1, format));
317 void tst_qdeclarativelocale::standaloneMonthName_data()
319 addStandardFormatData();
322 void tst_qdeclarativelocale::standaloneMonthName()
324 QFETCH(QString, locale);
327 QDeclarativeComponent c(&engine, testFileUrl("functions.qml"));
329 QObject *obj = c.create();
334 QLocale::FormatType format = QLocale::LongFormat;
336 format = QLocale::FormatType(param);
338 QMetaObject::invokeMethod(obj, "setLocale", Qt::DirectConnection,
339 Q_ARG(QVariant, QVariant(locale)));
341 for (int i = 0; i <= 11; ++i) {
342 QMetaObject::invokeMethod(obj, "standaloneMonthName", Qt::DirectConnection,
343 Q_RETURN_ARG(QVariant, val),
344 Q_ARG(QVariant, QVariant(i)),
345 Q_ARG(QVariant, QVariant(int(format))));
347 // QLocale January == 1, JS Date January == 0
348 QCOMPARE(val.toString(), l.standaloneMonthName(i+1, format));
354 void tst_qdeclarativelocale::dayName_data()
356 addStandardFormatData();
359 void tst_qdeclarativelocale::dayName()
361 QFETCH(QString, locale);
364 QDeclarativeComponent c(&engine, testFileUrl("functions.qml"));
366 QObject *obj = c.create();
371 QLocale::FormatType format = QLocale::LongFormat;
373 format = QLocale::FormatType(param);
375 QMetaObject::invokeMethod(obj, "setLocale", Qt::DirectConnection,
376 Q_ARG(QVariant, QVariant(locale)));
378 for (int i = 1; i <= 7; ++i) {
379 QMetaObject::invokeMethod(obj, "dayName", Qt::DirectConnection,
380 Q_RETURN_ARG(QVariant, val),
381 Q_ARG(QVariant, QVariant(i)),
382 Q_ARG(QVariant, QVariant(int(format))));
384 QCOMPARE(val.toString(), l.dayName(i, format));
390 void tst_qdeclarativelocale::standaloneDayName_data()
392 addStandardFormatData();
395 void tst_qdeclarativelocale::standaloneDayName()
397 QFETCH(QString, locale);
400 QDeclarativeComponent c(&engine, testFileUrl("functions.qml"));
402 QObject *obj = c.create();
407 QLocale::FormatType format = param < 0 ? QLocale::LongFormat : QLocale::FormatType(param);
409 QMetaObject::invokeMethod(obj, "setLocale", Qt::DirectConnection,
410 Q_ARG(QVariant, QVariant(locale)));
412 for (int i = 1; i <= 7; ++i) {
413 QMetaObject::invokeMethod(obj, "standaloneDayName", Qt::DirectConnection,
414 Q_RETURN_ARG(QVariant, val),
415 Q_ARG(QVariant, QVariant(i)),
416 Q_ARG(QVariant, QVariant(int(format))));
418 QCOMPARE(val.toString(), l.standaloneDayName(i, format));
424 void tst_qdeclarativelocale::weekDays_data()
426 QTest::addColumn<QString>("locale");
428 QTest::newRow("en_US") << "en_US";
429 QTest::newRow("de_DE") << "de_DE";
430 QTest::newRow("ar_SA") << "ar_SA";
431 QTest::newRow("hi_IN") << "hi_IN";
432 QTest::newRow("zh_CN") << "zh_CN";
433 QTest::newRow("th_TH") << "th_TH";
436 void tst_qdeclarativelocale::weekDays()
438 QFETCH(QString, locale);
440 QDeclarativeComponent c(&engine, testFileUrl("properties.qml"));
442 QObject *obj = c.create();
445 QMetaObject::invokeMethod(obj, "setLocale", Qt::DirectConnection,
446 Q_ARG(QVariant, QVariant(locale)));
448 QVariant val = obj->property("weekDays");
449 QVERIFY(val.type() == QVariant::List);
451 QList<QVariant> qmlDays = val.toList();
452 QList<Qt::DayOfWeek> days = QLocale(locale).weekdays();
454 QVERIFY(days.count() == qmlDays.count());
456 for (int i = 0; i < days.count(); ++i) {
457 int day = int(days.at(i));
458 if (day == 7) // JS Date days in range 0(Sunday) to 6(Saturday)
460 QCOMPARE(day, qmlDays.at(i).toInt());
467 void tst_qdeclarativelocale::dateTimeFormat_data()
469 addStandardFormatData();
472 void tst_qdeclarativelocale::dateTimeFormat()
474 QFETCH(QString, locale);
477 QDeclarativeComponent c(&engine, testFileUrl("functions.qml"));
479 QObject *obj = c.create();
485 QMetaObject::invokeMethod(obj, "setLocale", Qt::DirectConnection,
486 Q_ARG(QVariant, QVariant(locale)));
488 QLocale::FormatType format = param < 0 ? QLocale::LongFormat : QLocale::FormatType(param);
489 QMetaObject::invokeMethod(obj, "dateTimeFormat", Qt::DirectConnection,
490 Q_RETURN_ARG(QVariant, val),
491 Q_ARG(QVariant, QVariant(param)));
493 QCOMPARE(val.toString(), l.dateTimeFormat(format));
496 void tst_qdeclarativelocale::dateFormat_data()
498 addStandardFormatData();
501 void tst_qdeclarativelocale::dateFormat()
503 QFETCH(QString, locale);
506 QDeclarativeComponent c(&engine, testFileUrl("functions.qml"));
508 QObject *obj = c.create();
514 QMetaObject::invokeMethod(obj, "setLocale", Qt::DirectConnection,
515 Q_ARG(QVariant, QVariant(locale)));
517 QLocale::FormatType format = param < 0 ? QLocale::LongFormat : QLocale::FormatType(param);
518 QMetaObject::invokeMethod(obj, "dateFormat", Qt::DirectConnection,
519 Q_RETURN_ARG(QVariant, val),
520 Q_ARG(QVariant, QVariant(param)));
522 QCOMPARE(val.toString(), l.dateFormat(format));
525 void tst_qdeclarativelocale::timeFormat_data()
527 addStandardFormatData();
530 void tst_qdeclarativelocale::timeFormat()
532 QFETCH(QString, locale);
535 QDeclarativeComponent c(&engine, testFileUrl("functions.qml"));
537 QObject *obj = c.create();
543 QMetaObject::invokeMethod(obj, "setLocale", Qt::DirectConnection,
544 Q_ARG(QVariant, QVariant(locale)));
546 QLocale::FormatType format = param < 0 ? QLocale::LongFormat : QLocale::FormatType(param);
547 QMetaObject::invokeMethod(obj, "timeFormat", Qt::DirectConnection,
548 Q_RETURN_ARG(QVariant, val),
549 Q_ARG(QVariant, QVariant(param)));
551 QCOMPARE(val.toString(), l.timeFormat(format));
554 void tst_qdeclarativelocale::dateToLocaleString_data()
556 addStandardFormatData();
559 void tst_qdeclarativelocale::dateToLocaleString()
561 QFETCH(QString, locale);
564 QDeclarativeComponent c(&engine, testFileUrl("date.qml"));
566 QObject *obj = c.create();
570 dt.setDate(QDate(2011, 10, 7)); // weirdly, JS Date month range is 0-11
571 dt.setTime(QTime(18, 53, 48, 345));
573 QMetaObject::invokeMethod(obj, "setLocale", Qt::DirectConnection,
574 Q_ARG(QVariant, QVariant(locale)));
576 QLocale::FormatType format = param < 0 ? QLocale::LongFormat : QLocale::FormatType(param);
579 QMetaObject::invokeMethod(obj, "toLocaleString", Qt::DirectConnection,
580 Q_RETURN_ARG(QVariant, val),
581 Q_ARG(QVariant, QVariant(param)));
584 QCOMPARE(val.toString(), l.toString(dt, format));
587 void tst_qdeclarativelocale::addDateTimeFormatData(const QString &l)
589 const char *formats[] = {
591 "h:m:sap ddd MMMM d yy",
592 "'The date and time is: 'H:mm:ss:zzz dd/MM/yy",
593 "MMM d yyyy HH:mm t",
596 QByteArray locale = l.toLatin1();
599 QByteArray t(locale);
602 QTest::newRow(t.constData()) << l << QString(formats[i]);
607 void tst_qdeclarativelocale::dateToLocaleStringFormatted_data()
609 QTest::addColumn<QString>("locale");
610 QTest::addColumn<QString>("format");
612 addDateTimeFormatData("en_US");
613 addDateTimeFormatData("de_DE");
614 addDateTimeFormatData("ar_SA");
615 addDateTimeFormatData("hi_IN");
616 addDateTimeFormatData("zh_CN");
617 addDateTimeFormatData("th_TH");
620 void tst_qdeclarativelocale::dateToLocaleStringFormatted()
622 QFETCH(QString, locale);
623 QFETCH(QString, format);
625 QDeclarativeComponent c(&engine, testFileUrl("date.qml"));
627 QObject *obj = c.create();
631 dt.setDate(QDate(2011, 10, 7)); // weirdly, JS Date month range is 0-11
632 dt.setTime(QTime(18, 53, 48, 345));
634 QMetaObject::invokeMethod(obj, "setLocale", Qt::DirectConnection,
635 Q_ARG(QVariant, QVariant(locale)));
638 QMetaObject::invokeMethod(obj, "toLocaleString", Qt::DirectConnection,
639 Q_RETURN_ARG(QVariant, val),
640 Q_ARG(QVariant, QVariant(format)));
643 QCOMPARE(val.toString(), l.toString(dt, format));
646 void tst_qdeclarativelocale::dateToLocaleDateString_data()
648 addStandardFormatData();
651 void tst_qdeclarativelocale::dateToLocaleDateString()
653 QFETCH(QString, locale);
656 QDeclarativeComponent c(&engine, testFileUrl("date.qml"));
658 QObject *obj = c.create();
662 dt.setDate(QDate(2011, 10, 7)); // weirdly, JS Date month range is 0-11
663 dt.setTime(QTime(18, 53, 48, 345));
665 QMetaObject::invokeMethod(obj, "setLocale", Qt::DirectConnection,
666 Q_ARG(QVariant, QVariant(locale)));
668 QLocale::FormatType format = param < 0 ? QLocale::LongFormat : QLocale::FormatType(param);
671 QMetaObject::invokeMethod(obj, "toLocaleDateString", Qt::DirectConnection,
672 Q_RETURN_ARG(QVariant, val),
673 Q_ARG(QVariant, QVariant(param)));
676 QCOMPARE(val.toString(), l.toString(dt.date(), format));
679 void tst_qdeclarativelocale::addDateFormatData(const QString &l)
681 const char *formats[] = {
684 "'The date is: 'dd/MM/yy",
688 QByteArray locale = l.toLatin1();
691 QByteArray t(locale);
694 QTest::newRow(t.constData()) << l << QString(formats[i]);
699 void tst_qdeclarativelocale::dateToLocaleDateStringFormatted_data()
701 QTest::addColumn<QString>("locale");
702 QTest::addColumn<QString>("format");
704 addDateFormatData("en_US");
705 addDateFormatData("de_DE");
706 addDateFormatData("ar_SA");
707 addDateFormatData("hi_IN");
708 addDateFormatData("zh_CN");
709 addDateFormatData("th_TH");
712 void tst_qdeclarativelocale::dateToLocaleDateStringFormatted()
714 QFETCH(QString, locale);
715 QFETCH(QString, format);
717 QDeclarativeComponent c(&engine, testFileUrl("date.qml"));
719 QObject *obj = c.create();
723 dt.setDate(QDate(2011, 10, 7)); // weirdly, JS Date month range is 0-11
724 dt.setTime(QTime(18, 53, 48, 345));
726 QMetaObject::invokeMethod(obj, "setLocale", Qt::DirectConnection,
727 Q_ARG(QVariant, QVariant(locale)));
730 QMetaObject::invokeMethod(obj, "toLocaleString", Qt::DirectConnection,
731 Q_RETURN_ARG(QVariant, val),
732 Q_ARG(QVariant, QVariant(format)));
735 QCOMPARE(val.toString(), l.toString(dt.date(), format));
738 void tst_qdeclarativelocale::dateToLocaleTimeString_data()
740 addStandardFormatData();
743 void tst_qdeclarativelocale::dateToLocaleTimeString()
745 QFETCH(QString, locale);
748 QDeclarativeComponent c(&engine, testFileUrl("date.qml"));
750 QObject *obj = c.create();
754 dt.setDate(QDate(2011, 10, 7)); // weirdly, JS Date month range is 0-11
755 dt.setTime(QTime(18, 53, 48, 345));
757 QMetaObject::invokeMethod(obj, "setLocale", Qt::DirectConnection,
758 Q_ARG(QVariant, QVariant(locale)));
760 QLocale::FormatType format = param < 0 ? QLocale::LongFormat : QLocale::FormatType(param);
763 QMetaObject::invokeMethod(obj, "toLocaleTimeString", Qt::DirectConnection,
764 Q_RETURN_ARG(QVariant, val),
765 Q_ARG(QVariant, QVariant(param)));
768 QCOMPARE(val.toString(), l.toString(dt.time(), format));
771 void tst_qdeclarativelocale::addTimeFormatData(const QString &l)
773 const char *formats[] = {
776 "'The time is: 'H:mm:ss:zzz",
780 QByteArray locale = l.toLatin1();
783 QByteArray t(locale);
786 QTest::newRow(t.constData()) << l << QString(formats[i]);
791 void tst_qdeclarativelocale::dateToLocaleTimeStringFormatted_data()
793 QTest::addColumn<QString>("locale");
794 QTest::addColumn<QString>("format");
796 addTimeFormatData("en_US");
797 addTimeFormatData("de_DE");
798 addTimeFormatData("ar_SA");
799 addTimeFormatData("hi_IN");
800 addTimeFormatData("zh_CN");
801 addTimeFormatData("th_TH");
804 void tst_qdeclarativelocale::dateToLocaleTimeStringFormatted()
806 QFETCH(QString, locale);
807 QFETCH(QString, format);
809 QDeclarativeComponent c(&engine, testFileUrl("date.qml"));
811 QObject *obj = c.create();
815 dt.setDate(QDate(2011, 10, 7)); // weirdly, JS Date month range is 0-11
816 dt.setTime(QTime(18, 53, 48, 345));
818 QMetaObject::invokeMethod(obj, "setLocale", Qt::DirectConnection,
819 Q_ARG(QVariant, QVariant(locale)));
822 QMetaObject::invokeMethod(obj, "toLocaleString", Qt::DirectConnection,
823 Q_RETURN_ARG(QVariant, val),
824 Q_ARG(QVariant, QVariant(format)));
827 QCOMPARE(val.toString(), l.toString(dt.time(), format));
830 void tst_qdeclarativelocale::dateFromLocaleString_data()
832 QTest::addColumn<QString>("locale");
833 QTest::addColumn<QString>("format");
835 QTest::newRow("en_US 1") << "en_US" << "dddd, MMMM d, yyyy h:mm:ss AP";
836 QTest::newRow("en_US long") << "en_US" << QLocale("en_US").dateTimeFormat();
837 QTest::newRow("en_US short") << "en_US" << QLocale("en_US").dateTimeFormat(QLocale::ShortFormat);
838 QTest::newRow("de_DE long") << "de_DE" << QLocale("de_DE").dateTimeFormat();
839 QTest::newRow("de_DE short") << "de_DE" << QLocale("de_DE").dateTimeFormat(QLocale::ShortFormat);
840 QTest::newRow("ar_SA long") << "ar_SA" << QLocale("ar_SA").dateTimeFormat();
841 QTest::newRow("ar_SA short") << "ar_SA" << QLocale("ar_SA").dateTimeFormat(QLocale::ShortFormat);
842 QTest::newRow("zh_CN long") << "zh_CN" << QLocale("zh_CN").dateTimeFormat();
843 QTest::newRow("zh_CN short") << "zh_CN" << QLocale("zh_CN").dateTimeFormat(QLocale::ShortFormat);
846 void tst_qdeclarativelocale::dateFromLocaleString()
848 QFETCH(QString, locale);
849 QFETCH(QString, format);
851 QDeclarativeComponent c(&engine, testFileUrl("date.qml"));
853 QObject *obj = c.create();
857 dt.setDate(QDate(2011, 10, 7));
858 dt.setTime(QTime(18, 53, 48, 345));
860 QMetaObject::invokeMethod(obj, "setLocale", Qt::DirectConnection,
861 Q_ARG(QVariant, QVariant(locale)));
865 QMetaObject::invokeMethod(obj, "fromLocaleString", Qt::DirectConnection,
866 Q_RETURN_ARG(QVariant, val),
867 Q_ARG(QVariant, QVariant(l.toString(dt, format))),
868 Q_ARG(QVariant, QVariant(format)));
870 QDateTime pd = l.toDateTime(l.toString(dt, format), format);
871 QCOMPARE(val.toDateTime(), pd);
874 void tst_qdeclarativelocale::dateFromLocaleDateString_data()
876 QTest::addColumn<QString>("locale");
877 QTest::addColumn<QString>("format");
879 QTest::newRow("en_US 1") << "en_US" << "dddd, MMMM d, yyyy h:mm:ss AP";
880 QTest::newRow("en_US long") << "en_US" << QLocale("en_US").dateTimeFormat();
881 QTest::newRow("en_US short") << "en_US" << QLocale("en_US").dateTimeFormat(QLocale::ShortFormat);
882 QTest::newRow("de_DE long") << "de_DE" << QLocale("de_DE").dateTimeFormat();
883 QTest::newRow("de_DE short") << "de_DE" << QLocale("de_DE").dateTimeFormat(QLocale::ShortFormat);
884 QTest::newRow("ar_SA long") << "ar_SA" << QLocale("ar_SA").dateTimeFormat();
885 QTest::newRow("ar_SA short") << "ar_SA" << QLocale("ar_SA").dateTimeFormat(QLocale::ShortFormat);
886 QTest::newRow("zh_CN long") << "zh_CN" << QLocale("zh_CN").dateTimeFormat();
887 QTest::newRow("zh_CN short") << "zh_CN" << QLocale("zh_CN").dateTimeFormat(QLocale::ShortFormat);
890 void tst_qdeclarativelocale::dateFromLocaleDateString()
892 QFETCH(QString, locale);
893 QFETCH(QString, format);
895 QDeclarativeComponent c(&engine, testFileUrl("date.qml"));
897 QObject *obj = c.create();
901 dt.setDate(QDate(2011, 10, 7));
902 dt.setTime(QTime(18, 53, 48, 345));
904 QMetaObject::invokeMethod(obj, "setLocale", Qt::DirectConnection,
905 Q_ARG(QVariant, QVariant(locale)));
909 QMetaObject::invokeMethod(obj, "fromLocaleDateString", Qt::DirectConnection,
910 Q_RETURN_ARG(QVariant, val),
911 Q_ARG(QVariant, QVariant(l.toString(dt, format))),
912 Q_ARG(QVariant, QVariant(format)));
914 QDate pd = l.toDate(l.toString(dt, format), format);
915 QCOMPARE(val.toDate(), pd);
918 void tst_qdeclarativelocale::dateFromLocaleTimeString_data()
920 QTest::addColumn<QString>("locale");
921 QTest::addColumn<QString>("format");
923 QTest::newRow("en_US 1") << "en_US" << "dddd, MMMM d, yyyy h:mm:ss AP";
924 QTest::newRow("en_US long") << "en_US" << QLocale("en_US").dateTimeFormat();
925 QTest::newRow("en_US short") << "en_US" << QLocale("en_US").dateTimeFormat(QLocale::ShortFormat);
926 QTest::newRow("de_DE long") << "de_DE" << QLocale("de_DE").dateTimeFormat();
927 QTest::newRow("de_DE short") << "de_DE" << QLocale("de_DE").dateTimeFormat(QLocale::ShortFormat);
928 QTest::newRow("ar_SA long") << "ar_SA" << QLocale("ar_SA").dateTimeFormat();
929 QTest::newRow("ar_SA short") << "ar_SA" << QLocale("ar_SA").dateTimeFormat(QLocale::ShortFormat);
930 QTest::newRow("zh_CN long") << "zh_CN" << QLocale("zh_CN").dateTimeFormat();
931 QTest::newRow("zh_CN short") << "zh_CN" << QLocale("zh_CN").dateTimeFormat(QLocale::ShortFormat);
934 void tst_qdeclarativelocale::dateFromLocaleTimeString()
936 QFETCH(QString, locale);
937 QFETCH(QString, format);
939 QDeclarativeComponent c(&engine, testFileUrl("date.qml"));
941 QObject *obj = c.create();
945 dt.setDate(QDate(2011, 10, 7));
946 dt.setTime(QTime(18, 53, 48, 345));
948 QMetaObject::invokeMethod(obj, "setLocale", Qt::DirectConnection,
949 Q_ARG(QVariant, QVariant(locale)));
953 QMetaObject::invokeMethod(obj, "fromLocaleTimeString", Qt::DirectConnection,
954 Q_RETURN_ARG(QVariant, val),
955 Q_ARG(QVariant, QVariant(l.toString(dt, format))),
956 Q_ARG(QVariant, QVariant(format)));
958 QTime pd = l.toTime(l.toString(dt, format), format);
959 QCOMPARE(val.toTime(), pd);
962 void tst_qdeclarativelocale::numberToLocaleString_data()
964 QTest::addColumn<QString>("locale");
965 QTest::addColumn<char>("format");
966 QTest::addColumn<int>("prec");
968 QTest::newRow("en_US 1") << "en_US" << 'f' << 2;
969 QTest::newRow("en_US 2") << "en_US" << 'g' << 3;
970 QTest::newRow("en_US 3") << "en_US" << 'f' << 0;
971 QTest::newRow("en_US 4") << "en_US" << 'f' << -1;
972 QTest::newRow("de_DE 1") << "de_DE" << 'f' << 2;
973 QTest::newRow("de_DE 2") << "de_DE" << 'g' << 3;
974 QTest::newRow("ar_SA 1") << "ar_SA" << 'f' << 2;
975 QTest::newRow("ar_SA 2") << "ar_SA" << 'g' << 3;
978 void tst_qdeclarativelocale::numberToLocaleString()
980 QFETCH(QString, locale);
981 QFETCH(char, format);
984 QDeclarativeComponent c(&engine, testFileUrl("number.qml"));
986 QObject *obj = c.create();
989 double number = 2344423.3289;
991 QMetaObject::invokeMethod(obj, "setLocale", Qt::DirectConnection,
992 Q_ARG(QVariant, QVariant(locale)));
996 QMetaObject::invokeMethod(obj, "toLocaleString", Qt::DirectConnection,
997 Q_RETURN_ARG(QVariant, val),
998 Q_ARG(QVariant, QVariant(number)),
999 Q_ARG(QVariant, QVariant(QString(format))),
1000 Q_ARG(QVariant, QVariant(prec)));
1002 if (prec < 0) prec = 2;
1003 QCOMPARE(val.toString(), l.toString(number, format, prec));
1006 void tst_qdeclarativelocale::numberToLocaleCurrencyString_data()
1008 QTest::addColumn<QString>("locale");
1009 QTest::addColumn<QString>("symbol");
1011 QTest::newRow("en_US 1") << "en_US" << QString();
1012 QTest::newRow("en_US 2") << "en_US" << "USD";
1013 QTest::newRow("de_DE") << "de_DE" << QString();
1014 QTest::newRow("ar_SA") << "ar_SA" << QString();
1015 QTest::newRow("hi_IN") << "hi_IN" << QString();
1016 QTest::newRow("zh_CN") << "zh_CN" << QString();
1017 QTest::newRow("th_TH") << "th_TH" << QString();
1020 void tst_qdeclarativelocale::numberToLocaleCurrencyString()
1022 QFETCH(QString, locale);
1023 QFETCH(QString, symbol);
1025 QDeclarativeComponent c(&engine, testFileUrl("number.qml"));
1027 QObject *obj = c.create();
1030 double number = 2344423.3289;
1032 QMetaObject::invokeMethod(obj, "setLocale", Qt::DirectConnection,
1033 Q_ARG(QVariant, QVariant(locale)));
1037 QMetaObject::invokeMethod(obj, "toLocaleCurrencyString", Qt::DirectConnection,
1038 Q_RETURN_ARG(QVariant, val),
1039 Q_ARG(QVariant, QVariant(number)),
1040 Q_ARG(QVariant, QVariant(symbol)));
1042 QCOMPARE(val.toString(), l.toCurrencyString(number, symbol));
1045 void tst_qdeclarativelocale::numberFromLocaleString_data()
1047 QTest::addColumn<QString>("locale");
1048 QTest::addColumn<double>("number");
1050 QTest::newRow("en_US 1") << "en_US" << 1234567.2345;
1051 QTest::newRow("en_US 2") << "en_US" << 0.234;
1052 QTest::newRow("en_US 3") << "en_US" << 234.0;
1053 QTest::newRow("de_DE") << "de_DE" << 1234567.2345;
1054 QTest::newRow("ar_SA") << "ar_SA" << 1234567.2345;
1055 QTest::newRow("hi_IN") << "hi_IN" << 1234567.2345;
1056 QTest::newRow("zh_CN") << "zh_CN" << 1234567.2345;
1057 QTest::newRow("th_TH") << "th_TH" << 1234567.2345;
1060 void tst_qdeclarativelocale::numberFromLocaleString()
1062 QFETCH(QString, locale);
1063 QFETCH(double, number);
1065 QDeclarativeComponent c(&engine, testFileUrl("number.qml"));
1067 QObject *obj = c.create();
1071 QString strNumber = l.toString(number, 'f');
1073 QMetaObject::invokeMethod(obj, "setLocale", Qt::DirectConnection,
1074 Q_ARG(QVariant, QVariant(locale)));
1077 QMetaObject::invokeMethod(obj, "fromLocaleString", Qt::DirectConnection,
1078 Q_RETURN_ARG(QVariant, val),
1079 Q_ARG(QVariant, QVariant(strNumber)));
1081 QCOMPARE(val.toDouble(), l.toDouble(strNumber));
1084 void tst_qdeclarativelocale::numberConstToLocaleString()
1086 QDeclarativeComponent c(&engine, testFileUrl("number.qml"));
1088 QObject *obj = c.create();
1091 QMetaObject::invokeMethod(obj, "setLocale", Qt::DirectConnection,
1092 Q_ARG(QVariant, QVariant("en_US")));
1095 QCOMPARE(obj->property("const1").toString(), l.toString(1234.56, 'f', 2));
1096 QCOMPARE(obj->property("const2").toString(), l.toString(1234., 'f', 2));
1099 QTEST_MAIN(tst_qdeclarativelocale)
1101 #include "tst_qdeclarativelocale.moc"