Fix assertion on matchingLocales(Abhkazian, Any, Any)
CLDR v39 has no locales for Abkhazian, so the locale_index[] entry for it actually indexes the last entry before the next language up the enum. This has m_language_id less than Abkhazian. Change-Id: If8b88f30476a981b3ee00ff8760a46ede0b7aab7 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
This commit is contained in:
parent
3b155973c4
commit
358df462a0
@ -2640,15 +2640,15 @@ QList<QLocale> QLocale::matchingLocales(QLocale::Language language, QLocale::Scr
|
||||
result.reserve(locale_data_size);
|
||||
|
||||
quint16 index = locale_index[language];
|
||||
Q_ASSERT(filter.acceptLanguage(locale_data[index].m_language_id));
|
||||
do {
|
||||
// There may be no matches, for some languages (e.g. Abkhazian at CLDR v39).
|
||||
while (filter.acceptLanguage(locale_data[index].m_language_id)) {
|
||||
const QLocaleId id = locale_data[index].id();
|
||||
if (filter.acceptScriptTerritory(id)) {
|
||||
result.append(QLocale(*(id.language_id == C ? c_private()
|
||||
: new QLocalePrivate(locale_data + index, index))));
|
||||
}
|
||||
++index;
|
||||
} while (filter.acceptLanguage(locale_data[index].m_language_id));
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2020 The Qt Company Ltd.
|
||||
** Copyright (C) 2021 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the test suite of the Qt Toolkit.
|
||||
@ -716,6 +716,12 @@ void tst_QLocale::matchingLocales()
|
||||
QVERIFY(!locales.isEmpty());
|
||||
QVERIFY(!locales.contains(c));
|
||||
QVERIFY(locales.contains(ru_RU));
|
||||
|
||||
// Regression check for assertion failure when no locales match:
|
||||
locales = QLocale::matchingLocales(QLocale::Abkhazian, QLocale::AnyScript, QLocale::AnyTerritory);
|
||||
// Empty in CLDR v39, but don't require that.
|
||||
QVERIFY(!locales.contains(c));
|
||||
QVERIFY(!locales.contains(ru_RU));
|
||||
}
|
||||
|
||||
void tst_QLocale::unixLocaleName_data()
|
||||
|
Loading…
Reference in New Issue
Block a user