]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
tpl/compare: Use any data type for compare.Conditional condition
authorJoe Mooring <joe.mooring@veriphor.com>
Fri, 20 Sep 2024 20:13:02 +0000 (13:13 -0700)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 22 Sep 2024 14:53:11 +0000 (16:53 +0200)
Improves #5792

tpl/compare/compare.go
tpl/compare/compare_test.go

index d6a764c6add2593dc542b76be15fadff63f166fb..d32f3df9511b7dca88e0d61714ec22449b17a3a6 100644 (file)
@@ -231,8 +231,8 @@ func (n *Namespace) checkComparisonArgCount(min int, others ...any) bool {
 // Conditional can be used as a ternary operator.
 //
 // It returns v1 if cond is true, else v2.
-func (n *Namespace) Conditional(cond bool, v1, v2 any) any {
-       if cond {
+func (n *Namespace) Conditional(cond any, v1, v2 any) any {
+       if hreflect.IsTruthful(cond) {
                return v1
        }
        return v2
index 6c3f430281dab9656abc0892e5d32031e7aa6566..0ebebef4b8ee42c91904945e9dc12deb4d8b1fb2 100644 (file)
@@ -21,10 +21,9 @@ import (
        "testing"
        "time"
 
-       "github.com/gohugoio/hugo/htesting/hqt"
-
        qt "github.com/frankban/quicktest"
        "github.com/gohugoio/hugo/common/hugo"
+       "github.com/gohugoio/hugo/htesting/hqt"
        "github.com/spf13/cast"
 )
 
@@ -447,12 +446,35 @@ func TestTimeUnix(t *testing.T) {
 }
 
 func TestConditional(t *testing.T) {
+       t.Parallel()
        c := qt.New(t)
-       n := New(time.UTC, false)
-       a, b := "a", "b"
+       ns := New(time.UTC, false)
 
-       c.Assert(n.Conditional(true, a, b), qt.Equals, a)
-       c.Assert(n.Conditional(false, a, b), qt.Equals, b)
+       type args struct {
+               cond any
+               v1   any
+               v2   any
+       }
+       tests := []struct {
+               name string
+               args args
+               want any
+       }{
+               {"a", args{cond: true, v1: "true", v2: "false"}, "true"},
+               {"b", args{cond: false, v1: "true", v2: "false"}, "false"},
+               {"c", args{cond: 1, v1: "true", v2: "false"}, "true"},
+               {"d", args{cond: 0, v1: "true", v2: "false"}, "false"},
+               {"e", args{cond: "foo", v1: "true", v2: "false"}, "true"},
+               {"f", args{cond: "", v1: "true", v2: "false"}, "false"},
+               {"g", args{cond: []int{6, 7}, v1: "true", v2: "false"}, "true"},
+               {"h", args{cond: []int{}, v1: "true", v2: "false"}, "false"},
+               {"i", args{cond: nil, v1: "true", v2: "false"}, "false"},
+       }
+       for _, tt := range tests {
+               t.Run(tt.name, func(t *testing.T) {
+                       c.Assert(ns.Conditional(tt.args.cond, tt.args.v1, tt.args.v2), qt.Equals, tt.want)
+               })
+       }
 }
 
 // Issue 9462