tpl/time: Handle nil values in time.AsTime
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Mon, 9 Aug 2021 16:44:35 +0000 (18:44 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Mon, 9 Aug 2021 16:44:35 +0000 (18:44 +0200)
Closes #8865

tpl/time/time.go
tpl/time/time_test.go

index b89dcfe091091dc2d46285ebb1d06ec8a9c29b09..f10f3a23a6f9aa4e67cd863328ce4ee7bef1bdc6 100644 (file)
@@ -19,6 +19,8 @@ import (
        "time"
        _time "time"
 
+       "github.com/gohugoio/hugo/common/hreflect"
+
        "github.com/gohugoio/hugo/common/htime"
 
        "github.com/gohugoio/locales"
@@ -43,6 +45,9 @@ type Namespace struct {
 // AsTime converts the textual representation of the datetime string into
 // a time.Time interface.
 func (ns *Namespace) AsTime(v interface{}, args ...interface{}) (interface{}, error) {
+       if !hreflect.IsTruthful(v) {
+               return time.Time{}, nil
+       }
        loc := ns.location
        if len(args) > 0 {
                locStr, err := cast.ToStringE(args[0])
index f6e4d0f72586b42b55ae65d690c5e18186df3c84..c699f200be2d016a61506ce18ebe83e9f7e97dd7 100644 (file)
@@ -29,7 +29,7 @@ func TestTimeLocation(t *testing.T) {
 
        for i, test := range []struct {
                name     string
-               value    string
+               value    interface{}
                location interface{}
                expect   interface{}
        }{
@@ -39,6 +39,9 @@ func TestTimeLocation(t *testing.T) {
                {"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"},
+               {"Nil value", nil, "", "0001-01-01 00:00:00 +0000"},
+               {"Empty value", "", "", "0001-01-01 00:00:00 +0000"},
+
                // The following have an explicit offset specified. In this case, it overrides timezone
                {"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"},