Skip to content

Commit

Permalink
tpl/compare: Use any data type for compare.Conditional condition
Browse files Browse the repository at this point in the history
Improves gohugoio#5792
  • Loading branch information
jmooring authored and bep committed Sep 22, 2024
1 parent 1e690c0 commit 0ea796d
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 8 deletions.
4 changes: 2 additions & 2 deletions tpl/compare/compare.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
34 changes: 28 additions & 6 deletions tpl/compare/compare_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)

Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 0ea796d

Please sign in to comment.