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 }