hugo

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

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

images_test.go (2729B)

    1 // Copyright 2017 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 	"bytes"
   18 	"image"
   19 	"image/color"
   20 	"image/png"
   21 	"path/filepath"
   22 	"testing"
   23 
   24 	qt "github.com/frankban/quicktest"
   25 	"github.com/gohugoio/hugo/config"
   26 	"github.com/gohugoio/hugo/deps"
   27 	"github.com/gohugoio/hugo/hugofs"
   28 	"github.com/spf13/afero"
   29 	"github.com/spf13/cast"
   30 )
   31 
   32 type tstNoStringer struct{}
   33 
   34 var configTests = []struct {
   35 	path   any
   36 	input  []byte
   37 	expect any
   38 }{
   39 	{
   40 		path:  "a.png",
   41 		input: blankImage(10, 10),
   42 		expect: image.Config{
   43 			Width:      10,
   44 			Height:     10,
   45 			ColorModel: color.NRGBAModel,
   46 		},
   47 	},
   48 	{
   49 		path:  "a.png",
   50 		input: blankImage(10, 10),
   51 		expect: image.Config{
   52 			Width:      10,
   53 			Height:     10,
   54 			ColorModel: color.NRGBAModel,
   55 		},
   56 	},
   57 	{
   58 		path:  "b.png",
   59 		input: blankImage(20, 15),
   60 		expect: image.Config{
   61 			Width:      20,
   62 			Height:     15,
   63 			ColorModel: color.NRGBAModel,
   64 		},
   65 	},
   66 	{
   67 		path:  "a.png",
   68 		input: blankImage(20, 15),
   69 		expect: image.Config{
   70 			Width:      10,
   71 			Height:     10,
   72 			ColorModel: color.NRGBAModel,
   73 		},
   74 	},
   75 	// errors
   76 	{path: tstNoStringer{}, expect: false},
   77 	{path: "non-existent.png", expect: false},
   78 	{path: "", expect: false},
   79 }
   80 
   81 func TestNSConfig(t *testing.T) {
   82 	t.Parallel()
   83 	c := qt.New(t)
   84 
   85 	v := config.NewWithTestDefaults()
   86 	v.Set("workingDir", "/a/b")
   87 
   88 	ns := New(&deps.Deps{Fs: hugofs.NewMem(v)})
   89 
   90 	for _, test := range configTests {
   91 
   92 		// check for expected errors early to avoid writing files
   93 		if b, ok := test.expect.(bool); ok && !b {
   94 			_, err := ns.Config(test.path)
   95 			c.Assert(err, qt.Not(qt.IsNil))
   96 			continue
   97 		}
   98 
   99 		// cast path to string for afero.WriteFile
  100 		sp, err := cast.ToStringE(test.path)
  101 		c.Assert(err, qt.IsNil)
  102 		afero.WriteFile(ns.deps.Fs.Source, filepath.Join(v.GetString("workingDir"), sp), test.input, 0755)
  103 
  104 		result, err := ns.Config(test.path)
  105 
  106 		c.Assert(err, qt.IsNil)
  107 		c.Assert(result, qt.Equals, test.expect)
  108 		c.Assert(len(ns.cache), qt.Not(qt.Equals), 0)
  109 	}
  110 }
  111 
  112 func blankImage(width, height int) []byte {
  113 	var buf bytes.Buffer
  114 	img := image.NewRGBA(image.Rect(0, 0, width, height))
  115 	if err := png.Encode(&buf, img); err != nil {
  116 		panic(err)
  117 	}
  118 	return buf.Bytes()
  119 }