tpl/collections: Fix where ... not in with empty slice

Fixes #13621
This commit is contained in:
Bjørn Erik Pedersen 2025-04-21 11:53:38 +02:00
parent 5e62cc6fce
commit 4eb0e4286a
3 changed files with 24 additions and 0 deletions

View file

@ -278,3 +278,23 @@ disableKinds = ['rss','sitemap', 'taxonomy', 'term', 'page']
b.AssertFileContentExact("public/index.html", "0: /a3_b1.html\n\n1: /b2.html\n\n2: /a1.html\n\n3: /a2.html\n$")
}
// Issue 13621.
func TestWhereNotInEmptySlice(t *testing.T) {
t.Parallel()
files := `
-- hugo.toml --
-- layouts/home.html --
{{- $pages := where site.RegularPages "Kind" "not in" (slice) -}}
Len: {{ $pages | len }}|
-- layouts/all.html --
All|{{ .Title }}|
-- content/p1.md --
`
b := hugolib.Test(t, files)
b.AssertFileContent("public/index.html", "Len: 1|")
}

View file

@ -138,6 +138,9 @@ func (ns *Namespace) checkCondition(v, mv reflect.Value, op string) (bool, error
}
if mv.Len() == 0 {
if op == "not in" {
return true, nil
}
return false, nil
}

View file

@ -761,6 +761,7 @@ func TestCheckCondition(t *testing.T) {
expect{true, false},
},
{reflect.ValueOf(123), reflect.ValueOf([]int{45, 678}), "not in", expect{true, false}},
{reflect.ValueOf(123), reflect.ValueOf([]int{}), "not in", expect{true, false}},
{reflect.ValueOf("foo"), reflect.ValueOf([]string{"bar", "baz"}), "not in", expect{true, false}},
{
reflect.ValueOf(time.Date(2015, time.May, 26, 19, 18, 56, 12345, time.UTC)),