diff options
-rw-r--r-- | src/corelib/tools/qlocale.cpp | 2 | ||||
-rw-r--r-- | tests/auto/corelib/tools/qlocale/tst_qlocale.cpp | 46 |
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" |