gh-137481: Fix abbreviation of day names in TextCalendar (GH-137482)

Use the length of the longest day name in the current locale, rather
than a constant 9, to decide if the names should be abbreviated.
This commit is contained in:
Scott Noyes 2025-08-20 12:55:50 -04:00 committed by GitHub
parent 7fda8b66de
commit 3143ceeb1d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 49 additions and 1 deletions

View file

@ -696,6 +696,52 @@ def test_locale_calendar_formatweekday(self):
except locale.Error:
raise unittest.SkipTest('cannot set the en_US locale')
# These locales have weekday names all shorter than English's longest
# 'Wednesday'. They should not be abbreviated unnecessarily
@support.run_with_locales("LC_ALL",
'Chinese', 'zh_CN.UTF-8',
'French', 'fr_FR.UTF-8',
'Norwegian', 'nb_NO.UTF-8',
'Malay', 'ms_MY.UTF8'
)
def test_locale_calendar_short_weekday_names(self):
names = (datetime.date(2001, 1, i+1).strftime('%A') for i in range(7))
max_length = max(map(len, names))
if max_length >= 9:
self.skipTest('weekday names are too long')
def get_weekday_names(width):
return calendar.TextCalendar().formatweekheader(width).split()
# Weekday names should not be abbreviated if the width is sufficient
self.assertEqual(
get_weekday_names(max_length),
get_weekday_names(max_length + 10)
)
# Any width shorter than necessary should produce abbreviations
self.assertNotEqual(
get_weekday_names(max_length),
get_weekday_names(max_length - 1)
)
# These locales have a weekday name longer than 'Wednesday'
# They should be properly abbreviated rather than truncated
@support.run_with_locales("LC_ALL",
'Portuguese', 'pt_PT.UTF-8',
'German', 'de_DE.UTF-8',
'Russian', 'ru_RU.UTF-8',
)
def test_locale_calendar_long_weekday_names(self):
names = (datetime.date(2001, 1, i+1).strftime('%A') for i in range(7))
max_length = max(map(len, names))
if max_length <= 9:
self.skipTest('weekday names are too short')
def get_weekday_names(width):
return calendar.TextCalendar().formatweekheader(width).split()
self.assertEqual(get_weekday_names(4), get_weekday_names(9))
def test_locale_calendar_formatmonthname(self):
try:
# formatmonthname uses the same month names regardless of the width argument.