status-go/images/decode_test.go

202 lines
3.2 KiB
Go

package images
import (
"errors"
"image"
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/require"
)
const (
path = "../_assets/tests/"
)
func TestDecode(t *testing.T) {
cs := []struct {
Filepath string
Error bool
Nil bool
Bounds image.Rectangle
}{
{
"elephant.jpg",
false,
false,
image.Rectangle{
Min: image.Point{X: 0, Y: 0},
Max: image.Point{X: 80, Y: 80},
},
},
{
"status.png",
false,
false,
image.Rectangle{
Min: image.Point{X: 0, Y: 0},
Max: image.Point{X: 256, Y: 256},
},
},
{
"spin.gif",
false,
false,
image.Rectangle{
Min: image.Point{X: 0, Y: 0},
Max: image.Point{X: 256, Y: 256},
},
},
{
"rose.webp",
false,
false,
image.Rectangle{
Min: image.Point{X: 0, Y: 0},
Max: image.Point{X: 400, Y: 301},
},
},
{
"test.aac",
true,
true,
image.Rectangle{},
},
}
for _, c := range cs {
img, err := Decode(path + c.Filepath)
if c.Error {
require.Error(t, err)
} else {
require.NoError(t, err)
}
if c.Nil {
require.Nil(t, img)
continue
} else {
require.NotNil(t, img)
}
require.Exactly(t, c.Bounds, img.Bounds())
}
}
func TestDecodeFromURL(t *testing.T) {
s := httptest.NewServer(http.FileServer(http.Dir(path)))
defer s.Close()
cs := []struct {
Filepath string
Nil bool
Bounds image.Rectangle
}{
{
s.URL + "/2x1.png",
false,
image.Rectangle{
Min: image.Point{X: 0, Y: 0},
Max: image.Point{X: 2, Y: 1},
},
},
{
s.URL + "/1.jpg",
false,
image.Rectangle{
Min: image.Point{X: 0, Y: 0},
Max: image.Point{X: 1, Y: 1},
},
},
{
s.URL + "/1.gif",
false,
image.Rectangle{
Min: image.Point{X: 0, Y: 0},
Max: image.Point{X: 1, Y: 1},
},
},
{
s.URL + "/1.webp",
false,
image.Rectangle{
Min: image.Point{X: 0, Y: 0},
Max: image.Point{X: 1, Y: 1},
},
},
{
s.URL + "/1.webp",
true,
image.Rectangle{
Min: image.Point{X: 0, Y: 0},
Max: image.Point{X: 10, Y: 10},
},
},
}
for _, c := range cs {
img, err := DecodeFromURL(c.Filepath)
if c.Nil {
require.Nil(t, err)
} else {
require.NoError(t, err)
require.Exactly(t, c.Bounds, img.Bounds())
}
}
}
func TestDecodeFromURL_WithErrors(t *testing.T) {
s := httptest.NewServer(http.FileServer(http.Dir(path)))
defer s.Close()
_, err := DecodeFromURL("https://doesnt-exist.com")
require.Error(t, err)
}
func TestGetType(t *testing.T) {
cs := []struct {
Buf []byte
Value ImageType
}{
{testJpegBytes, JPEG},
{testPngBytes, PNG},
{testGifBytes, GIF},
{testWebpBytes, WEBP},
{testAacBytes, UNKNOWN},
}
for _, c := range cs {
require.Exactly(t, c.Value, GetType(c.Buf))
}
}
func TestGetMimeType(t *testing.T) {
cs := []struct {
Buf []byte
Value string
Error error
}{
{testJpegBytes, "jpeg", nil},
{testPngBytes, "png", nil},
{testGifBytes, "gif", nil},
{testWebpBytes, "webp", nil},
{testAacBytes, "", errors.New("image format not supported")},
}
for _, c := range cs {
mt, err := GetMimeType(c.Buf)
if c.Error == nil {
require.NoError(t, err)
} else {
require.EqualError(t, err, c.Error.Error())
}
require.Exactly(t, c.Value, mt)
}
}