images/encode_test.go
package images
import (
"bytes"
"errors"
"testing"
"github.com/stretchr/testify/require"
)
func TestEncode(t *testing.T) {
cs := []struct {
FileName string
RenderSize int
}{
{
"elephant.jpg",
1447,
},
{
"rose.webp",
11119,
},
{
"spin.gif",
2263,
},
{
"status.png",
5834,
},
}
options := EncodeConfig{
Quality: 70,
}
for _, c := range cs {
img, err := Decode(path + c.FileName)
require.NoError(t, err)
bb := bytes.NewBuffer([]byte{})
err = Encode(bb, img, options)
require.NoError(t, err)
require.Exactly(t, c.RenderSize, bb.Len())
}
}
func TestEncodeToBestSize(t *testing.T) {
cs := []struct {
FileName string
RenderSize int
Error error
}{
{
"elephant.jpg",
1467,
nil,
},
{
"rose.webp",
8513,
errors.New("image size after processing exceeds max, expected < '5632', received < '8513'"),
},
{
"spin.gif",
2407,
nil,
},
{
"status.png",
4725,
nil,
},
}
for _, c := range cs {
img, err := Decode(path + c.FileName)
require.NoError(t, err)
bb := bytes.NewBuffer([]byte{})
err = EncodeToBestSize(bb, img, ResizeDimensions[0])
require.Exactly(t, c.RenderSize, bb.Len())
if c.Error != nil {
require.EqualError(t, err, c.Error.Error())
} else {
require.NoError(t, err)
}
}
}
func TestCompressToFileLimits(t *testing.T) {
img, err := Decode(path + "IMG_1205.HEIC.jpg")
require.NoError(t, err)
bb := bytes.NewBuffer([]byte{})
err = CompressToFileLimits(bb, img, FileSizeLimits{50000, 350000})
require.NoError(t, err)
require.Equal(t, 291645, bb.Len())
}
func TestGetPayloadFromURI(t *testing.T) {
payload, err := GetPayloadFromURI("data:image/jpeg;base64,/9j/2wCEAFA3PEY8MlA=")
require.NoError(t, err)
require.Equal(
t,
[]byte{0xff, 0xd8, 0xff, 0xdb, 0x0, 0x84, 0x0, 0x50, 0x37, 0x3c, 0x46, 0x3c, 0x32, 0x50},
payload,
)
}
func TestIsSvg(t *testing.T) {
GoodSVG := []byte(`<svg width="300" height="130" xmlns="http://www.w3.org/2000/svg">
<rect width="200" height="100" x="10" y="10" rx="20" ry="20" fill="blue" />
Sorry, your browser does not support inline SVG.
</svg>`)
BadSVG := []byte(`<head>
<link rel="stylesheet" href="styles.css">
</head>`)
require.Equal(t, IsSVG(BadSVG), false)
require.Equal(t, IsSVG(GoodSVG), true)
}
func TestIsIco(t *testing.T) {
GoodICO, err := Asset("_assets/tests/wikipedia.ico")
require.NoError(t, err)
GoodPNG, err := Asset("_assets/tests/qr/defaultQR.png")
require.NoError(t, err)
require.Equal(t, IsIco(GoodICO), true)
require.Equal(t, IsIco(GoodPNG), false)
require.Equal(t, IsPng(GoodPNG), true)
require.Equal(t, IsPng(GoodICO), false)
}