From 9b85b81bc82f4e615b5d165425dc9f84fd2ae482 Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Sat, 24 Nov 2012 04:09:34 +0200 Subject: QLocale: Fix matchingLocales() behavior if script or country is not Any* Since the documentation doesn't mention the search should be done by language only, consider the current behavior incorrect. As of now, it is possible to get a list of locales by Country or Script as well. Also fix countriesForLanguage() to be in-sync with matchingLocales(). Change-Id: I6a09ca459120143565fa6099d2b823df1fed7c25 Reviewed-by: Denis Dzyubenko --- tests/auto/corelib/tools/qlocale/tst_qlocale.cpp | 30 ++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'tests') diff --git a/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp b/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp index 911187da53..ea65236d16 100644 --- a/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp +++ b/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp @@ -100,6 +100,7 @@ private slots: #endif void legacyNames(); void unixLocaleName(); + void matchingLocales(); void double_conversion_data(); void double_conversion(); void long_long_conversion_data(); @@ -534,6 +535,35 @@ void tst_QLocale::legacyNames() #undef TEST_CTOR } +void tst_QLocale::matchingLocales() +{ + const QLocale c(QLocale::C); + const QLocale ru_RU(QLocale::Russian, QLocale::Russia); + + QList locales = QLocale::matchingLocales(QLocale::C, QLocale::AnyScript, QLocale::AnyCountry); + QCOMPARE(locales.size(), 1); + QVERIFY(locales.contains(c)); + + locales = QLocale::matchingLocales(QLocale::Russian, QLocale::CyrillicScript, QLocale::Russia); + QCOMPARE(locales.size(), 1); + QVERIFY(locales.contains(ru_RU)); + + locales = QLocale::matchingLocales(QLocale::Russian, QLocale::AnyScript, QLocale::AnyCountry); + QVERIFY(!locales.isEmpty()); + QVERIFY(!locales.contains(c)); + QVERIFY(locales.contains(ru_RU)); + + locales = QLocale::matchingLocales(QLocale::AnyLanguage, QLocale::CyrillicScript, QLocale::AnyCountry); + QVERIFY(!locales.isEmpty()); + QVERIFY(!locales.contains(c)); + QVERIFY(locales.contains(ru_RU)); + + locales = QLocale::matchingLocales(QLocale::AnyLanguage, QLocale::AnyScript, QLocale::Russia); + QVERIFY(!locales.isEmpty()); + QVERIFY(!locales.contains(c)); + QVERIFY(locales.contains(ru_RU)); +} + void tst_QLocale::unixLocaleName() { #define TEST_NAME(req_lang, req_country, exp_name) \ -- cgit v1.2.3