Make QLocale consistent about special handling of the C locale
QLocale::matchingLocales() simply created each locale using the basic data, without (unless the matching conditions stipulated Language C) applying number-options hacks that it applies everywhere else, when creating the C locale. Thus the C locale in its returned list (if it wasn't the only entry) ended up with the default number options, without omiting separators in numbers. Thus QLocale::c() didn't actually appear as an entry in the list. Discovered while investigating QTBUG-58947. Added a dumb autotest that checks various ways of getting the C locale do actually give us equal locale objects. Fixed matchingLocales() to apply the same hack as is used elsewhere for the C locale. Change-Id: I263f31da623052b63171f5b5a83c65802383df21 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
f2e103296f
commit
a1c27748d2
@ -2115,8 +2115,8 @@ QList<QLocale> QLocale::matchingLocales(QLocale::Language language,
|
||||
&& (language == QLocale::AnyLanguage || data->m_language_id == uint(language))) {
|
||||
if ((script == QLocale::AnyScript || data->m_script_id == uint(script))
|
||||
&& (country == QLocale::AnyCountry || data->m_country_id == uint(country))) {
|
||||
QLocale locale(*QLocalePrivate::create(data));
|
||||
result.append(locale);
|
||||
result.append(QLocale(*(data->m_language_id == C ? c_private()
|
||||
: QLocalePrivate::create(data))));
|
||||
}
|
||||
++data;
|
||||
}
|
||||
|
@ -80,6 +80,7 @@ private slots:
|
||||
void ctor();
|
||||
void emptyCtor();
|
||||
void legacyNames();
|
||||
void consistentC();
|
||||
void unixLocaleName();
|
||||
void matchingLocales();
|
||||
void stringToDouble_data();
|
||||
@ -579,6 +580,15 @@ void tst_QLocale::legacyNames()
|
||||
#undef TEST_CTOR
|
||||
}
|
||||
|
||||
void tst_QLocale::consistentC()
|
||||
{
|
||||
const QLocale c(QLocale::C);
|
||||
QCOMPARE(c, QLocale::c());
|
||||
QCOMPARE(c, QLocale(QLocale::C, QLocale::AnyScript, QLocale::AnyCountry));
|
||||
QVERIFY(QLocale::matchingLocales(QLocale::AnyLanguage, QLocale::AnyScript,
|
||||
QLocale::AnyCountry).contains(c));
|
||||
}
|
||||
|
||||
void tst_QLocale::matchingLocales()
|
||||
{
|
||||
const QLocale c(QLocale::C);
|
||||
|
Loading…
x
Reference in New Issue
Block a user