diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2018-09-09 10:15:11 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2018-09-10 09:19:01 +0200 |
commit | fe6676c775b8d917a661238f24fd4a9088f25d50 (patch) | |
tree | a84c05a70dc203392db4343a2185cfe0a5714140 /hugolib/collections_test.go | |
parent | 7a97d3e6bca1e30826e1662b5f299b66aa8ab385 (diff) | |
download | hugo-fe6676c775b8d917a661238f24fd4a9088f25d50.tar.gz hugo-fe6676c775b8d917a661238f24fd4a9088f25d50.zip |
tpl/collections: Improve type handling in collections.Slice
Fixes #5188
Diffstat (limited to 'hugolib/collections_test.go')
-rw-r--r-- | hugolib/collections_test.go | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/hugolib/collections_test.go b/hugolib/collections_test.go new file mode 100644 index 000000000..124a6ede7 --- /dev/null +++ b/hugolib/collections_test.go @@ -0,0 +1,88 @@ +// Copyright 2018 The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hugolib + +import ( + "fmt" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestGroupFunc(t *testing.T) { + assert := require.New(t) + + pageContent := ` +--- +title: "Page" +--- + +` + b := newTestSitesBuilder(t) + b.WithSimpleConfigFile(). + WithContent("page1.md", pageContent, "page2.md", pageContent). + WithTemplatesAdded("index.html", ` +{{ $cool := .Site.RegularPages | group "cool" }} +{{ $cool.Key }}: {{ len $cool.Pages }} + +`) + b.CreateSites().Build(BuildCfg{}) + + assert.Equal(1, len(b.H.Sites)) + require.Len(t, b.H.Sites[0].RegularPages, 2) + + b.AssertFileContent("public/index.html", "cool: 2") +} + +func TestSliceFunc(t *testing.T) { + assert := require.New(t) + + pageContent := ` +--- +title: "Page" +tags: ["blue", "green"] +tags_weight: %d +--- + +` + b := newTestSitesBuilder(t) + b.WithSimpleConfigFile(). + WithContent("page1.md", fmt.Sprintf(pageContent, 10), "page2.md", fmt.Sprintf(pageContent, 20)). + WithTemplatesAdded("index.html", ` +{{ $cool := first 1 .Site.RegularPages | group "cool" }} +{{ $blue := after 1 .Site.RegularPages | group "blue" }} +{{ $weightedPages := index (index .Site.Taxonomies "tags") "blue" }} + +{{ $p1 := index .Site.RegularPages 0 }}{{ $p2 := index .Site.RegularPages 1 }} +{{ $wp1 := index $weightedPages 0 }}{{ $wp2 := index $weightedPages 1 }} + +{{ $pages := slice $p1 $p2 }} +{{ $pageGroups := slice $cool $blue }} +{{ $weighted := slice $wp1 $wp2 }} + +{{ printf "pages:%d:%T:%v/%v" (len $pages) $pages (index $pages 0) (index $pages 1) }} +{{ printf "pageGroups:%d:%T:%v/%v" (len $pageGroups) $pageGroups (index (index $pageGroups 0).Pages 0) (index (index $pageGroups 1).Pages 0)}} +{{ printf "weightedPages:%d::%T:%v" (len $weighted) $weighted $weighted | safeHTML }} + +`) + b.CreateSites().Build(BuildCfg{}) + + assert.Equal(1, len(b.H.Sites)) + require.Len(t, b.H.Sites[0].RegularPages, 2) + + b.AssertFileContent("public/index.html", + "pages:2:hugolib.Pages:Page(/page1.md)/Page(/page2.md)", + "pageGroups:2:hugolib.PagesGroup:Page(/page1.md)/Page(/page2.md)", + `weightedPages:2::hugolib.WeightedPages:[WeightedPage(10,"Page") WeightedPage(20,"Page")]`) +} |