Skip to content

Commit

Permalink
common/htime: Fix time.Format with Go layouts
Browse files Browse the repository at this point in the history
Fixes #9107
  • Loading branch information
bep committed Nov 1, 2021
1 parent 7fa6642 commit ed6fd26
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 3 deletions.
8 changes: 6 additions & 2 deletions common/htime/time.go
Original file line number Diff line number Diff line change
Expand Up @@ -123,9 +123,13 @@ func (f TimeFormatter) Format(t time.Time, layout string) string {
dayIdx := t.Weekday()

s = strings.ReplaceAll(s, longMonthNames[monthIdx], f.ltr.MonthWide(t.Month()))
s = strings.ReplaceAll(s, shortMonthNames[monthIdx], f.ltr.MonthAbbreviated(t.Month()))
if !strings.Contains(s, f.ltr.MonthWide(t.Month())) {
s = strings.ReplaceAll(s, shortMonthNames[monthIdx], f.ltr.MonthAbbreviated(t.Month()))
}
s = strings.ReplaceAll(s, longDayNames[dayIdx], f.ltr.WeekdayWide(t.Weekday()))
s = strings.ReplaceAll(s, shortDayNames[dayIdx], f.ltr.WeekdayAbbreviated(t.Weekday()))
if !strings.Contains(s, f.ltr.WeekdayWide(t.Weekday())) {
s = strings.ReplaceAll(s, shortDayNames[dayIdx], f.ltr.WeekdayAbbreviated(t.Weekday()))
}

return s
}
Expand Down
39 changes: 38 additions & 1 deletion common/htime/time_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ import (
"testing"
"time"

translators "github.com/gohugoio/localescompressed"
qt "github.com/frankban/quicktest"
translators "github.com/gohugoio/localescompressed"
)

func TestTimeFormatter(t *testing.T) {
Expand All @@ -27,6 +27,12 @@ func TestTimeFormatter(t *testing.T) {
june06, _ := time.Parse("2006-Jan-02", "2018-Jun-06")
june06 = june06.Add(7777 * time.Second)

jan06, _ := time.Parse("2006-Jan-02", "2018-Jan-06")
jan06 = jan06.Add(32 * time.Second)

mondayNovemberFirst, _ := time.Parse("2006-Jan-02", "2021-11-01")
mondayNovemberFirst = mondayNovemberFirst.Add(33 * time.Second)

c.Run("Norsk nynorsk", func(c *qt.C) {
f := NewTimeFormatter(translators.GetTranslator("nn"))

Expand Down Expand Up @@ -73,6 +79,37 @@ func TestTimeFormatter(t *testing.T) {
c.Assert(f.Format(june06, "Mon Mon"), qt.Equals, "Wed Wed")
})

c.Run("Weekdays German", func(c *qt.C) {
tr := translators.GetTranslator("de")
f := NewTimeFormatter(tr)

// Issue #9107
for i, weekDayWideGerman := range []string{"Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"} {
date := mondayNovemberFirst.Add(time.Duration(i*24) * time.Hour)
c.Assert(tr.WeekdayWide(date.Weekday()), qt.Equals, weekDayWideGerman)
c.Assert(f.Format(date, "Monday"), qt.Equals, weekDayWideGerman)
}

for i, weekDayAbbreviatedGerman := range []string{"Mo.", "Di.", "Mi.", "Do.", "Fr.", "Sa.", "So."} {
date := mondayNovemberFirst.Add(time.Duration(i*24) * time.Hour)
c.Assert(tr.WeekdayAbbreviated(date.Weekday()), qt.Equals, weekDayAbbreviatedGerman)
c.Assert(f.Format(date, "Mon"), qt.Equals, weekDayAbbreviatedGerman)
}
})

c.Run("Months German", func(c *qt.C) {
tr := translators.GetTranslator("de")
f := NewTimeFormatter(tr)

// Issue #9107
for i, monthWideNorway := range []string{"Januar", "Februar", "März", "April", "Mai", "Juni", "Juli"} {

This comment has been minimized.

Copy link
@raoulb

raoulb Nov 1, 2021

Contributor

Why just test the first few months? Especially since the others had issues.

This comment has been minimized.

Copy link
@bep

bep Nov 1, 2021

Author Member

Using that argument, we should also test all months of all languages, which lives outside of this project. The bug itself was of the binary type, so the above is good coverage.

date := jan06.Add(time.Duration(i*24*31) * time.Hour)
c.Assert(tr.MonthWide(date.Month()), qt.Equals, monthWideNorway)
c.Assert(f.Format(date, "January"), qt.Equals, monthWideNorway)
}

})

}

func BenchmarkTimeFormatter(b *testing.B) {
Expand Down

1 comment on commit ed6fd26

@raoulb
Copy link
Contributor

@raoulb raoulb commented on ed6fd26 Nov 1, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

BTW: Is there support for abbreviated month names?
("Jan." etc ...)

Please sign in to comment.