Fix tst_qlocale compilation when jalalicalendar is disabled

The 'syslocaleapp' test helper application was built only when
jalalicalendar is enabled. The tst_qlocale on the other hand
depends on 'syslocaleapp' if process-support is enabled.

Thus if jalalicalendar was disabled and process-support
enabled, the CMake configure fails because tst_qlocale won't meet
its 'syslocaleapp' dependency.

Fix by building a more limited version of the syslocaleapp when
jalalicalendar isn't supported, and adjust the testcase accordingly.

Pick-to: 6.9 6.8
Task-number: QTBUG-136101
Change-Id: Ic809b0124d47754105ca09b69e2b3c12856ba63a
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
This commit is contained in:
Juha Vuolle 2025-04-22 10:57:20 +03:00
parent 776dbdce7b
commit 3bbe9d8ec7
3 changed files with 46 additions and 32 deletions

View File

@ -8,6 +8,6 @@ if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
endif()
add_subdirectory(test)
if(QT_FEATURE_jalalicalendar)
if(QT_FEATURE_process)
add_subdirectory(syslocaleapp)
endif()

View File

@ -11,11 +11,15 @@ int main(int argc, char** argv)
// Setting a default locale should not mess up the system one.
QLocale::setDefault(QLocale::Persian);
QLocale l = QLocale::system();
QTextStream str(stdout);
#if QT_CONFIG(jalalicalendar)
// A non-Roman calendar will use CLDR data instead of system data, so needs
// to have got the right locale index to look that up.
QCalendar cal = QCalendar(QCalendar::System::Jalali);
QTextStream str(stdout);
str << l.name() << ' ' << cal.standaloneMonthName(l, 2);
#else
str << l.name();
#endif
return 0;
}

View File

@ -664,7 +664,13 @@ void tst_QLocale::systemLocale_data()
QTest::addColumn<QString>("expected");
#define ADD_CTOR_TEST(give, expect) QTest::newRow(give) << QStringLiteral(expect);
#if QT_CONFIG(jalalicalendar)
#define ADD_CTOR_TEST(input, localePart, monthName) \
QTest::newRow(input) << QStringLiteral(localePart) + " "_L1 + QStringLiteral(monthName);
#else
#define ADD_CTOR_TEST(input, localePart, monthName) \
QTest::newRow(input) << QStringLiteral(localePart);
#endif
// For format and meaning, see:
// http://pubs.opengroup.org/onlinepubs/7908799/xbd/envvar.html
@ -676,44 +682,44 @@ void tst_QLocale::systemLocale_data()
// setDefault(Persian) has interfered with the system locale setup.
// Vanilla:
ADD_CTOR_TEST("C", "C Ordibehesht");
ADD_CTOR_TEST("C", "C", "Ordibehesht");
// Standard forms:
ADD_CTOR_TEST("en", "en_US Ordibehesht");
ADD_CTOR_TEST("en_GB", "en_GB Ordibehesht");
ADD_CTOR_TEST("de", "de_DE Ordibehescht");
ADD_CTOR_TEST("en", "en_US", "Ordibehesht");
ADD_CTOR_TEST("en_GB", "en_GB", "Ordibehesht");
ADD_CTOR_TEST("de", "de_DE", "Ordibehescht");
// Norsk has some quirks:
ADD_CTOR_TEST("no", "nb_NO ordibehesht");
ADD_CTOR_TEST("nb", "nb_NO ordibehesht");
ADD_CTOR_TEST("nn", "nn_NO ordibehesht");
ADD_CTOR_TEST("no_NO", "nb_NO ordibehesht");
ADD_CTOR_TEST("nb_NO", "nb_NO ordibehesht");
ADD_CTOR_TEST("nn_NO", "nn_NO ordibehesht");
ADD_CTOR_TEST("no", "nb_NO", "ordibehesht");
ADD_CTOR_TEST("nb", "nb_NO", "ordibehesht");
ADD_CTOR_TEST("nn", "nn_NO", "ordibehesht");
ADD_CTOR_TEST("no_NO", "nb_NO", "ordibehesht");
ADD_CTOR_TEST("nb_NO", "nb_NO", "ordibehesht");
ADD_CTOR_TEST("nn_NO", "nn_NO", "ordibehesht");
// Not too fussy about case:
ADD_CTOR_TEST("DE", "de_DE Ordibehescht");
ADD_CTOR_TEST("EN", "en_US Ordibehesht");
ADD_CTOR_TEST("DE", "de_DE", "Ordibehescht");
ADD_CTOR_TEST("EN", "en_US", "Ordibehesht");
// Invalid fields
ADD_CTOR_TEST("bla", "C Ordibehesht");
ADD_CTOR_TEST("zz", "C Ordibehesht");
ADD_CTOR_TEST("zz_zz", "C Ordibehesht");
ADD_CTOR_TEST("zz...", "C Ordibehesht");
ADD_CTOR_TEST("en.bla", "en_US Ordibehesht");
ADD_CTOR_TEST("en@bla", "en_US Ordibehesht");
ADD_CTOR_TEST("en_blaaa", "en_US Ordibehesht");
ADD_CTOR_TEST("en_zz", "en_US Ordibehesht");
ADD_CTOR_TEST("en_GB.bla", "en_GB Ordibehesht");
ADD_CTOR_TEST("en_GB@.bla", "en_GB Ordibehesht");
ADD_CTOR_TEST("en_GB@bla", "en_GB Ordibehesht");
ADD_CTOR_TEST("bla", "C", "Ordibehesht");
ADD_CTOR_TEST("zz", "C", "Ordibehesht");
ADD_CTOR_TEST("zz_zz", "C", "Ordibehesht");
ADD_CTOR_TEST("zz...", "C", "Ordibehesht");
ADD_CTOR_TEST("en.bla", "en_US", "Ordibehesht");
ADD_CTOR_TEST("en@bla", "en_US", "Ordibehesht");
ADD_CTOR_TEST("en_blaaa", "en_US", "Ordibehesht");
ADD_CTOR_TEST("en_zz", "en_US", "Ordibehesht");
ADD_CTOR_TEST("en_GB.bla", "en_GB", "Ordibehesht");
ADD_CTOR_TEST("en_GB@.bla", "en_GB", "Ordibehesht");
ADD_CTOR_TEST("en_GB@bla", "en_GB", "Ordibehesht");
// Empty optional fields, but with punctuators supplied
ADD_CTOR_TEST("en.", "en_US Ordibehesht");
ADD_CTOR_TEST("en@", "en_US Ordibehesht");
ADD_CTOR_TEST("en.@", "en_US Ordibehesht");
ADD_CTOR_TEST("en_", "en_US Ordibehesht");
ADD_CTOR_TEST("en_.", "en_US Ordibehesht");
ADD_CTOR_TEST("en_.@", "en_US Ordibehesht");
ADD_CTOR_TEST("en.", "en_US", "Ordibehesht");
ADD_CTOR_TEST("en@", "en_US", "Ordibehesht");
ADD_CTOR_TEST("en.@", "en_US", "Ordibehesht");
ADD_CTOR_TEST("en_", "en_US", "Ordibehesht");
ADD_CTOR_TEST("en_.", "en_US", "Ordibehesht");
ADD_CTOR_TEST("en_.@", "en_US", "Ordibehesht");
#undef ADD_CTOR_TEST
#if QT_CONFIG(process) // for runSysApp
@ -722,7 +728,11 @@ void tst_QLocale::systemLocale_data()
QString errorMessage;
if (runSysApp(m_sysapp, QStringList(), cleanEnv, &defaultLoc, &errorMessage)) {
#if defined(Q_OS_MACOS)
#if QT_CONFIG(jalalicalendar)
QString localeForInvalidLocale = "C Ordibehesht";
#else
QString localeForInvalidLocale = "C";
#endif // QT_CONFIG(jalalicalendar)
#else
QString localeForInvalidLocale = defaultLoc;
#endif