hugo

Fork of github.com/gohugoio/hugo with reverse pagination support

git clone git://git.shimmy1996.com/hugo.git

config_test.go (4621B)

    1 // Copyright 2019 The Hugo Authors. All rights reserved.
    2 //
    3 // Licensed under the Apache License, Version 2.0 (the "License");
    4 // you may not use this file except in compliance with the License.
    5 // You may obtain a copy of the License at
    6 // http://www.apache.org/licenses/LICENSE-2.0
    7 //
    8 // Unless required by applicable law or agreed to in writing, software
    9 // distributed under the License is distributed on an "AS IS" BASIS,
   10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   11 // See the License for the specific language governing permissions and
   12 // limitations under the License.
   13 
   14 package images
   15 
   16 import (
   17 	"fmt"
   18 	"strings"
   19 	"testing"
   20 
   21 	qt "github.com/frankban/quicktest"
   22 )
   23 
   24 func TestDecodeConfig(t *testing.T) {
   25 	c := qt.New(t)
   26 	m := map[string]any{
   27 		"quality":        42,
   28 		"resampleFilter": "NearestNeighbor",
   29 		"anchor":         "topLeft",
   30 	}
   31 
   32 	imagingConfig, err := DecodeConfig(m)
   33 
   34 	c.Assert(err, qt.IsNil)
   35 	imaging := imagingConfig.Cfg
   36 	c.Assert(imaging.Quality, qt.Equals, 42)
   37 	c.Assert(imaging.ResampleFilter, qt.Equals, "nearestneighbor")
   38 	c.Assert(imaging.Anchor, qt.Equals, "topleft")
   39 
   40 	m = map[string]any{}
   41 
   42 	imagingConfig, err = DecodeConfig(m)
   43 	c.Assert(err, qt.IsNil)
   44 	imaging = imagingConfig.Cfg
   45 	c.Assert(imaging.ResampleFilter, qt.Equals, "box")
   46 	c.Assert(imaging.Anchor, qt.Equals, "smart")
   47 
   48 	_, err = DecodeConfig(map[string]any{
   49 		"quality": 123,
   50 	})
   51 	c.Assert(err, qt.Not(qt.IsNil))
   52 
   53 	_, err = DecodeConfig(map[string]any{
   54 		"resampleFilter": "asdf",
   55 	})
   56 	c.Assert(err, qt.Not(qt.IsNil))
   57 
   58 	_, err = DecodeConfig(map[string]any{
   59 		"anchor": "asdf",
   60 	})
   61 	c.Assert(err, qt.Not(qt.IsNil))
   62 
   63 	imagingConfig, err = DecodeConfig(map[string]any{
   64 		"anchor": "Smart",
   65 	})
   66 	imaging = imagingConfig.Cfg
   67 	c.Assert(err, qt.IsNil)
   68 	c.Assert(imaging.Anchor, qt.Equals, "smart")
   69 
   70 	imagingConfig, err = DecodeConfig(map[string]any{
   71 		"exif": map[string]any{
   72 			"disableLatLong": true,
   73 		},
   74 	})
   75 	c.Assert(err, qt.IsNil)
   76 	imaging = imagingConfig.Cfg
   77 	c.Assert(imaging.Exif.DisableLatLong, qt.Equals, true)
   78 	c.Assert(imaging.Exif.ExcludeFields, qt.Equals, "GPS|Exif|Exposure[M|P|B]|Contrast|Resolution|Sharp|JPEG|Metering|Sensing|Saturation|ColorSpace|Flash|WhiteBalance")
   79 }
   80 
   81 func TestDecodeImageConfig(t *testing.T) {
   82 	for i, this := range []struct {
   83 		action string
   84 		in     string
   85 		expect any
   86 	}{
   87 		{"resize", "300x400", newImageConfig("resize", 300, 400, 75, 0, "box", "smart", "")},
   88 		{"resize", "300x400 #fff", newImageConfig("resize", 300, 400, 75, 0, "box", "smart", "fff")},
   89 		{"resize", "100x200 bottomRight", newImageConfig("resize", 100, 200, 75, 0, "box", "BottomRight", "")},
   90 		{"resize", "10x20 topleft Lanczos", newImageConfig("resize", 10, 20, 75, 0, "Lanczos", "topleft", "")},
   91 		{"resize", "linear left 10x r180", newImageConfig("resize", 10, 0, 75, 180, "linear", "left", "")},
   92 		{"resize", "x20 riGht Cosine q95", newImageConfig("resize", 0, 20, 95, 0, "cosine", "right", "")},
   93 		{"crop", "300x400", newImageConfig("crop", 300, 400, 75, 0, "box", "smart", "")},
   94 		{"fill", "300x400", newImageConfig("fill", 300, 400, 75, 0, "box", "smart", "")},
   95 		{"fit", "300x400", newImageConfig("fit", 300, 400, 75, 0, "box", "smart", "")},
   96 
   97 		{"resize", "", false},
   98 		{"resize", "foo", false},
   99 		{"crop", "100x", false},
  100 		{"fill", "100x", false},
  101 		{"fit", "100x", false},
  102 		{"foo", "100x", false},
  103 	} {
  104 
  105 		cfg, err := DecodeConfig(nil)
  106 		if err != nil {
  107 			t.Fatal(err)
  108 		}
  109 		result, err := DecodeImageConfig(this.action, this.in, cfg, PNG)
  110 		if b, ok := this.expect.(bool); ok && !b {
  111 			if err == nil {
  112 				t.Errorf("[%d] parseImageConfig didn't return an expected error", i)
  113 			}
  114 		} else {
  115 			if err != nil {
  116 				t.Fatalf("[%d] err: %s", i, err)
  117 			}
  118 			if fmt.Sprint(result) != fmt.Sprint(this.expect) {
  119 				t.Fatalf("[%d] got\n%v\n but expected\n%v", i, result, this.expect)
  120 			}
  121 		}
  122 	}
  123 }
  124 
  125 func newImageConfig(action string, width, height, quality, rotate int, filter, anchor, bgColor string) ImageConfig {
  126 	var c ImageConfig = GetDefaultImageConfig(action, ImagingConfig{})
  127 	c.TargetFormat = PNG
  128 	c.Hint = 2
  129 	c.Width = width
  130 	c.Height = height
  131 	c.Quality = quality
  132 	c.qualitySetForImage = quality != 75
  133 	c.Rotate = rotate
  134 	c.BgColorStr = bgColor
  135 	c.BgColor, _ = hexStringToColor(bgColor)
  136 
  137 	if filter != "" {
  138 		filter = strings.ToLower(filter)
  139 		if v, ok := imageFilters[filter]; ok {
  140 			c.Filter = v
  141 			c.FilterStr = filter
  142 		}
  143 	}
  144 
  145 	if anchor != "" {
  146 		if anchor == smartCropIdentifier {
  147 			c.AnchorStr = anchor
  148 		} else {
  149 			anchor = strings.ToLower(anchor)
  150 			if v, ok := anchorPositions[anchor]; ok {
  151 				c.Anchor = v
  152 				c.AnchorStr = anchor
  153 			}
  154 		}
  155 	}
  156 
  157 	return c
  158 }