summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/tools/qlocale.cpp2
-rw-r--r--tests/auto/corelib/tools/qlocale/tst_qlocale.cpp46
2 files changed, 48 insertions, 0 deletions
diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp
index f7a6f35183..09b148ea9e 100644
--- a/src/corelib/tools/qlocale.cpp
+++ b/src/corelib/tools/qlocale.cpp
@@ -852,6 +852,8 @@ QLocale::QLocale(const QString &name)
QLocale::QLocale()
: d(*defaultLocalePrivate)
{
+ // Make sure system data is up to date
+ systemData();
}
/*!
diff --git a/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp b/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp
index fc1ac7cf0f..d5e2935d28 100644
--- a/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp
+++ b/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp
@@ -141,6 +141,8 @@ private slots:
void formattedDataSize();
void bcp47Name();
+ void systemLocale();
+
private:
QString m_decimal, m_thousand, m_sdate, m_ldate, m_time;
QString m_sysapp;
@@ -2641,5 +2643,49 @@ void tst_QLocale::bcp47Name()
QCOMPARE(QLocale("sr_Latn_HR").bcp47Name(), QStringLiteral("sr-Latn"));
}
+class MySystemLocale : public QSystemLocale
+{
+public:
+ MySystemLocale(const QLocale &locale) : m_locale(locale)
+ {
+ }
+
+ QVariant query(QueryType /*type*/, QVariant /*in*/) const override
+ {
+ return QVariant();
+ }
+
+ QLocale fallbackUiLocale() const override
+ {
+ return m_locale;
+ }
+
+private:
+ const QLocale m_locale;
+};
+
+void tst_QLocale::systemLocale()
+{
+ QLocale originalLocale;
+
+ MySystemLocale *sLocale = new MySystemLocale(QLocale("uk"));
+ QCOMPARE(QLocale().language(), QLocale::Ukrainian);
+ QCOMPARE(QLocale::system().language(), QLocale::Ukrainian);
+ delete sLocale;
+
+ sLocale = new MySystemLocale(QLocale("ca"));
+ QCOMPARE(QLocale().language(), QLocale::Catalan);
+ QCOMPARE(QLocale::system().language(), QLocale::Catalan);
+ delete sLocale;
+
+ sLocale = new MySystemLocale(QLocale("de"));
+ QCOMPARE(QLocale().language(), QLocale::German);
+ QCOMPARE(QLocale::system().language(), QLocale::German);
+ delete sLocale;
+
+ QCOMPARE(QLocale(), originalLocale);
+ QCOMPARE(QLocale::system(), originalLocale);
+}
+
QTEST_MAIN(tst_QLocale)
#include "tst_qlocale.moc"