hugo

Unnamed repository; edit this file 'description' to name the repository.

git clone git://git.shimmy1996.com/hugo.git
commit 9ff17c332405da5830cef9b3711706b1fc9a7444
parent 7aaaf7e33afd05d2c74d74fbbfbd34d55e8129eb
Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date:   Tue,  3 Aug 2021 06:58:25 +0200

tpl/time: Adjust tests to handle matching local time zones

Closes #8843

Diffstat:
Mtpl/time/time_test.go | 67+++++++++++++++++++++++++++++++++++++++++--------------------------
1 file changed, 41 insertions(+), 26 deletions(-)
diff --git a/tpl/time/time_test.go b/tpl/time/time_test.go
@@ -14,6 +14,7 @@
 package time
 
 import (
+	"strings"
 	"testing"
 	"time"
 
@@ -27,40 +28,54 @@ func TestTimeLocation(t *testing.T) {
 	ns := New(translators.GetTranslator("en"), loc)
 
 	for i, test := range []struct {
+		name     string
 		value    string
 		location interface{}
 		expect   interface{}
 	}{
-		{"2020-10-20", "", "2020-10-20 00:00:00 +0000 UTC"},
-		{"2020-10-20", nil, "2020-10-20 00:00:00 -0400 AST"},
-		{"2020-10-20", "America/New_York", "2020-10-20 00:00:00 -0400 EDT"},
-		{"2020-01-20", "America/New_York", "2020-01-20 00:00:00 -0500 EST"},
-		{"2020-10-20 20:33:59", "", "2020-10-20 20:33:59 +0000 UTC"},
-		{"2020-10-20 20:33:59", "America/New_York", "2020-10-20 20:33:59 -0400 EDT"},
+		{"Empty location", "2020-10-20", "", "2020-10-20 00:00:00 +0000 UTC"},
+		{"New location", "2020-10-20", nil, "2020-10-20 00:00:00 -0400 AST"},
+		{"New York EDT", "2020-10-20", "America/New_York", "2020-10-20 00:00:00 -0400 EDT"},
+		{"New York EST", "2020-01-20", "America/New_York", "2020-01-20 00:00:00 -0500 EST"},
+		{"Empty location, time", "2020-10-20 20:33:59", "", "2020-10-20 20:33:59 +0000 UTC"},
+		{"New York, time", "2020-10-20 20:33:59", "America/New_York", "2020-10-20 20:33:59 -0400 EDT"},
 		// The following have an explicit offset specified. In this case, it overrides timezone
-		{"2020-09-23T20:33:44-0700", "", "2020-09-23 20:33:44 -0700 -0700"},
-		{"2020-09-23T20:33:44-0700", "America/New_York", "2020-09-23 20:33:44 -0700 -0700"},
-		{"2020-01-20", "invalid-timezone", false}, // unknown time zone invalid-timezone
-		{"invalid-value", "", false},
+		{"Offset minus 0700, empty location", "2020-09-23T20:33:44-0700", "", "2020-09-23 20:33:44 -0700 -0700"},
+		{"Offset plus 0200, empty location", "2020-09-23T20:33:44+0200", "", "2020-09-23 20:33:44 +0200 +0200"},
+
+		{"Offset, New York", "2020-09-23T20:33:44-0700", "America/New_York", "2020-09-23 20:33:44 -0700 -0700"},
+		{"Offset, Oslo", "2020-09-23T20:33:44+0200", "Europe/Oslo", "2020-09-23 20:33:44 +0200 +0200"},
+
+		// Failures.
+		{"Invalid time zone", "2020-01-20", "invalid-timezone", false},
+		{"Invalid time value", "invalid-value", "", false},
 	} {
-		var args []interface{}
-		if test.location != nil {
-			args = append(args, test.location)
-		}
-		result, err := ns.AsTime(test.value, args...)
-		if b, ok := test.expect.(bool); ok && !b {
-			if err == nil {
-				t.Errorf("[%d] AsTime didn't return an expected error, got %v", i, result)
+		t.Run(test.name, func(t *testing.T) {
+			var args []interface{}
+			if test.location != nil {
+				args = append(args, test.location)
 			}
-		} else {
-			if err != nil {
-				t.Errorf("[%d] AsTime failed: %s", i, err)
-				continue
-			}
-			if result.(time.Time).String() != test.expect {
-				t.Errorf("[%d] AsTime got %v but expected %v", i, result, test.expect)
+			result, err := ns.AsTime(test.value, args...)
+			if b, ok := test.expect.(bool); ok && !b {
+				if err == nil {
+					t.Errorf("[%d] AsTime didn't return an expected error, got %v", i, result)
+				}
+			} else {
+				if err != nil {
+					t.Errorf("[%d] AsTime failed: %s", i, err)
+					return
+				}
+
+				// See https://github.com/gohugoio/hugo/issues/8843#issuecomment-891551447
+				// Drop the location string (last element) when comparing,
+				// as that may change depending on the local locale.
+				timeStr := result.(time.Time).String()
+				timeStr = timeStr[:strings.LastIndex(timeStr, " ")]
+				if !strings.HasPrefix(test.expect.(string), timeStr) {
+					t.Errorf("[%d] AsTime got %v but expected %v", i, timeStr, test.expect)
+				}
 			}
-		}
+		})
 	}
 }