github.com/status-im/status-go@v1.1.0/images/encode_test.go (about)

     1  package images
     2  
     3  import (
     4  	"bytes"
     5  	"errors"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/require"
     9  )
    10  
    11  func TestEncode(t *testing.T) {
    12  	cs := []struct {
    13  		FileName   string
    14  		RenderSize int
    15  	}{
    16  		{
    17  			"elephant.jpg",
    18  			1447,
    19  		},
    20  		{
    21  			"rose.webp",
    22  			11119,
    23  		},
    24  		{
    25  			"spin.gif",
    26  			2263,
    27  		},
    28  		{
    29  			"status.png",
    30  			5834,
    31  		},
    32  	}
    33  	options := EncodeConfig{
    34  		Quality: 70,
    35  	}
    36  
    37  	for _, c := range cs {
    38  		img, err := Decode(path + c.FileName)
    39  		require.NoError(t, err)
    40  
    41  		bb := bytes.NewBuffer([]byte{})
    42  		err = Encode(bb, img, options)
    43  		require.NoError(t, err)
    44  
    45  		require.Exactly(t, c.RenderSize, bb.Len())
    46  	}
    47  }
    48  
    49  func TestEncodeToBestSize(t *testing.T) {
    50  	cs := []struct {
    51  		FileName   string
    52  		RenderSize int
    53  		Error      error
    54  	}{
    55  		{
    56  			"elephant.jpg",
    57  			1467,
    58  			nil,
    59  		},
    60  		{
    61  			"rose.webp",
    62  			8513,
    63  			errors.New("image size after processing exceeds max, expected < '5632', received < '8513'"),
    64  		},
    65  		{
    66  			"spin.gif",
    67  			2407,
    68  			nil,
    69  		},
    70  		{
    71  			"status.png",
    72  			4725,
    73  			nil,
    74  		},
    75  	}
    76  
    77  	for _, c := range cs {
    78  		img, err := Decode(path + c.FileName)
    79  		require.NoError(t, err)
    80  
    81  		bb := bytes.NewBuffer([]byte{})
    82  		err = EncodeToBestSize(bb, img, ResizeDimensions[0])
    83  
    84  		require.Exactly(t, c.RenderSize, bb.Len())
    85  
    86  		if c.Error != nil {
    87  			require.EqualError(t, err, c.Error.Error())
    88  		} else {
    89  			require.NoError(t, err)
    90  		}
    91  	}
    92  }
    93  
    94  func TestCompressToFileLimits(t *testing.T) {
    95  	img, err := Decode(path + "IMG_1205.HEIC.jpg")
    96  	require.NoError(t, err)
    97  
    98  	bb := bytes.NewBuffer([]byte{})
    99  	err = CompressToFileLimits(bb, img, FileSizeLimits{50000, 350000})
   100  	require.NoError(t, err)
   101  	require.Equal(t, 291645, bb.Len())
   102  }
   103  
   104  func TestGetPayloadFromURI(t *testing.T) {
   105  	payload, err := GetPayloadFromURI("data:image/jpeg;base64,/9j/2wCEAFA3PEY8MlA=")
   106  	require.NoError(t, err)
   107  	require.Equal(
   108  		t,
   109  		[]byte{0xff, 0xd8, 0xff, 0xdb, 0x0, 0x84, 0x0, 0x50, 0x37, 0x3c, 0x46, 0x3c, 0x32, 0x50},
   110  		payload,
   111  	)
   112  }
   113  
   114  func TestIsSvg(t *testing.T) {
   115  	GoodSVG := []byte(`<svg width="300" height="130" xmlns="http://www.w3.org/2000/svg">
   116  	  <rect width="200" height="100" x="10" y="10" rx="20" ry="20" fill="blue" />
   117  	  Sorry, your browser does not support inline SVG.  
   118  	</svg>`)
   119  
   120  	BadSVG := []byte(`<head>
   121  	<link rel="stylesheet" href="styles.css">
   122    </head>`)
   123  
   124  	require.Equal(t, IsSVG(BadSVG), false)
   125  	require.Equal(t, IsSVG(GoodSVG), true)
   126  }
   127  
   128  func TestIsIco(t *testing.T) {
   129  	GoodICO, err := Asset("_assets/tests/wikipedia.ico")
   130  	require.NoError(t, err)
   131  
   132  	GoodPNG, err := Asset("_assets/tests/qr/defaultQR.png")
   133  	require.NoError(t, err)
   134  
   135  	require.Equal(t, IsIco(GoodICO), true)
   136  	require.Equal(t, IsIco(GoodPNG), false)
   137  	require.Equal(t, IsPng(GoodPNG), true)
   138  	require.Equal(t, IsPng(GoodICO), false)
   139  }