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(`   Sorry, your browser does not support inline SVG. `) BadSVG := []byte(` `) 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) }