diff options
author | Bjørn Erik Pedersen <[email protected]> | 2024-01-28 11:41:59 +0100 |
---|---|---|
committer | Bjørn Erik Pedersen <[email protected]> | 2024-01-28 11:41:59 +0100 |
commit | 2a0329423ce4b3359842affad76c40140d426943 (patch) | |
tree | 4bdbcb23b8c49492fce0d7697893fafc9c3dfc87 /resources/resources_integration_test.go | |
parent | 50dc327d1aa52a785382468aaf5a5f9cae456dbf (diff) | |
download | hugo-2a0329423ce4b3359842affad76c40140d426943.tar.gz hugo-2a0329423ce4b3359842affad76c40140d426943.zip |
testing: Rename integration_test.go to PACKAGE_integration_test.go
Primary motivation making them easier to find in the code editor.
Diffstat (limited to 'resources/resources_integration_test.go')
-rw-r--r-- | resources/resources_integration_test.go | 233 |
1 files changed, 233 insertions, 0 deletions
diff --git a/resources/resources_integration_test.go b/resources/resources_integration_test.go new file mode 100644 index 000000000..9540b0976 --- /dev/null +++ b/resources/resources_integration_test.go @@ -0,0 +1,233 @@ +// Copyright 2024 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 resources_test + +import ( + "strings" + "testing" + + qt "github.com/frankban/quicktest" + "github.com/gohugoio/hugo/hugolib" +) + +// Issue 8931 +func TestImageCache(t *testing.T) { + t.Parallel() + + files := ` +-- config.toml -- +baseURL = "https://example.org" +-- content/mybundle/index.md -- +--- +title: "My Bundle" +--- +-- content/mybundle/pixel.png -- +iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg== +-- content/mybundle/giphy.gif -- +sourcefilename: testdata/giphy.gif +-- layouts/foo.html -- +-- layouts/index.html -- +{{ $p := site.GetPage "mybundle"}} +{{ $img := $p.Resources.Get "pixel.png" }} +{{ $giphy := $p.Resources.Get "giphy.gif" }} +{{ $gif := $img.Resize "1x2 gif" }} +{{ $bmp := $img.Resize "2x3 bmp" }} +{{ $anigif := $giphy.Resize "4x5" }} + + +gif: {{ $gif.RelPermalink }}|}|{{ $gif.Width }}|{{ $gif.Height }}|{{ $gif.MediaType }}| +bmp: {{ $bmp.RelPermalink }}|}|{{ $bmp.Width }}|{{ $bmp.Height }}|{{ $bmp.MediaType }}| +anigif: {{ $anigif.RelPermalink }}|{{ $anigif.Width }}|{{ $anigif.Height }}|{{ $anigif.MediaType }}| +` + + b := hugolib.NewIntegrationTestBuilder( + hugolib.IntegrationTestConfig{ + T: t, + TxtarString: files, + NeedsOsFS: true, + Running: true, + }).Build() + + assertImages := func() { + b.AssertFileContent("public/index.html", ` + gif: /mybundle/pixel_hu8aa3346827e49d756ff4e630147c42b5_70_1x2_resize_box_3.gif|}|1|2|image/gif| + bmp: /mybundle/pixel_hu8aa3346827e49d756ff4e630147c42b5_70_2x3_resize_box_3.bmp|}|2|3|image/bmp| + anigif: /mybundle/giphy_hu3eafc418e52414ace6236bf1d31f82e1_52213_4x5_resize_box_1.gif|4|5|image/gif| + `) + } + + assertImages() + + b.EditFileReplaceFunc("content/mybundle/index.md", func(s string) string { return strings.ReplaceAll(s, "Bundle", "BUNDLE") }) + b.Build() + + assertImages() +} + +func TestSVGError(t *testing.T) { + t.Parallel() + + files := ` +-- config.toml -- +-- assets/circle.svg -- +<svg height="100" width="100"><circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="red" /></svg> +-- layouts/index.html -- +{{ $svg := resources.Get "circle.svg" }} +Width: {{ $svg.Width }} +` + + b, err := hugolib.NewIntegrationTestBuilder( + hugolib.IntegrationTestConfig{ + T: t, + TxtarString: files, + NeedsOsFS: true, + Running: true, + }).BuildE() + + b.Assert(err, qt.IsNotNil) + b.Assert(err.Error(), qt.Contains, `error calling Width: this method is only available for raster images. To determine if an image is SVG, you can do {{ if eq .MediaType.SubType "svg" }}{{ end }}`) +} + +// Issue 10255. +func TestNoPublishOfUnusedProcessedImage(t *testing.T) { + t.Parallel() + + workingDir := t.TempDir() + + files := ` +-- assets/images/pixel.png -- +iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg== +-- layouts/index.html -- +{{ $image := resources.Get "images/pixel.png" }} +{{ $image = $image.Resize "400x" }} +{{ $image = $image.Resize "300x" }} +{{ $image = $image.Resize "200x" }} +{{ $image = $image.Resize "100x" }} +{{ $image = $image.Crop "50x50" }} +{{ $image = $image.Filter (images.GaussianBlur 6) }} +{{ ($image | fingerprint).Permalink }} + + +` + + for i := 0; i < 3; i++ { + + b := hugolib.NewIntegrationTestBuilder( + hugolib.IntegrationTestConfig{ + T: t, + TxtarString: files, + NeedsOsFS: true, + WorkingDir: workingDir, + }).Build() + + b.AssertFileCount("resources/_gen/images", 6) + b.AssertFileCount("public/images", 1) + b.Build() + } +} + +func TestProcessFilter(t *testing.T) { + t.Parallel() + + files := ` +-- assets/images/pixel.png -- +iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg== +-- layouts/index.html -- +{{ $pixel := resources.Get "images/pixel.png" }} +{{ $filters := slice (images.GaussianBlur 6) (images.Pixelate 8) (images.Process "jpg") }} +{{ $image := $pixel.Filter $filters }} +jpg|RelPermalink: {{ $image.RelPermalink }}|MediaType: {{ $image.MediaType }}|Width: {{ $image.Width }}|Height: {{ $image.Height }}| +{{ $filters := slice (images.GaussianBlur 6) (images.Pixelate 8) (images.Process "jpg resize 20x30") }} +{{ $image := $pixel.Filter $filters }} +resize 1|RelPermalink: {{ $image.RelPermalink }}|MediaType: {{ $image.MediaType }}|Width: {{ $image.Width }}|Height: {{ $image.Height }}| +{{ $image := $pixel.Filter $filters }} +resize 2|RelPermalink: {{ $image.RelPermalink }}|MediaType: {{ $image.MediaType }}|Width: {{ $image.Width }}|Height: {{ $image.Height }}| + +` + + b := hugolib.NewIntegrationTestBuilder( + hugolib.IntegrationTestConfig{ + T: t, + TxtarString: files, + }).Build() + + b.AssertFileContent("public/index.html", + "jpg|RelPermalink: /images/pixel_hu8aa3346827e49d756ff4e630147c42b5_70_filter_17010532266664966692.jpg|MediaType: image/jpeg|Width: 1|Height: 1|", + "resize 1|RelPermalink: /images/pixel_hu8aa3346827e49d756ff4e630147c42b5_70_filter_6707036659822075562.jpg|MediaType: image/jpeg|Width: 20|Height: 30|", + "resize 2|RelPermalink: /images/pixel_hu8aa3346827e49d756ff4e630147c42b5_70_filter_6707036659822075562.jpg|MediaType: image/jpeg|Width: 20|Height: 30|", + ) +} + +// Issue #11563 +func TestGroupByParamDate(t *testing.T) { + t.Parallel() + + files := ` +-- config.toml -- +disableKinds = ['section','rss','sitemap','taxonomy','term'] +-- layouts/index.html -- +{{- range site.RegularPages.GroupByParamDate "eventDate" "2006-01" }} + {{- .Key }}|{{ range .Pages }}{{ .Title }}|{{ end }} +{{- end }} +-- content/p1.md -- ++++ +title = 'p1' +eventDate = 2023-09-01 ++++ +-- content/p2.md -- ++++ +title = 'p2' +eventDate = '2023-09-01' ++++ +-- content/p3.md -- +--- +title: p3 +eventDate: 2023-09-01 +--- +-- content/p4.md -- ++++ +title = 'p4' +eventDate = 2023-10-01T08:00:00 ++++ +-- content/p5.md -- ++++ +title = 'p5' +eventDate = '2023-10-01T08:00:00' ++++ +-- content/p6.md -- +--- +title: p6 +eventDate: 2023-10-01T08:00:00 +--- +-- content/p7.md -- ++++ +title = 'p7' +eventDate = 2023-11-01T07:00:00-08:00 ++++ +-- content/p8.md -- ++++ +title = 'p8' +eventDate = '2023-11-01T07:00:00-08:00' ++++ +-- content/p9.md -- +--- +title: p9 +eventDate: 2023-11-01T07:00:00-08:00 +--- + ` + + b := hugolib.Test(t, files) + + b.AssertFileContent("public/index.html", "2023-11|p9|p8|p7|2023-10|p6|p5|p4|2023-09|p3|p2|p1|") +} |