github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/app/imaging/utils_test.go (about)

     1  // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
     2  // See LICENSE.txt for license information.
     3  
     4  package imaging
     5  
     6  import (
     7  	"bytes"
     8  	"image/color"
     9  	"io/ioutil"
    10  	"os"
    11  	"testing"
    12  
    13  	"github.com/masterhung0112/hk_server/v5/utils/fileutils"
    14  
    15  	"github.com/stretchr/testify/require"
    16  )
    17  
    18  func TestFillImageTransparency(t *testing.T) {
    19  	tcs := []struct {
    20  		name       string
    21  		inputName  string
    22  		outputName string
    23  		fillColor  color.Color
    24  	}{
    25  		{
    26  			"8-bit Palette",
    27  			"fill_test_8bit_palette.png",
    28  			"fill_test_8bit_palette_out.png",
    29  			color.RGBA{0, 255, 0, 255},
    30  		},
    31  		{
    32  			"8-bit RGB",
    33  			"fill_test_8bit_rgb.png",
    34  			"fill_test_8bit_rgb_out.png",
    35  			color.RGBA{0, 255, 0, 255},
    36  		},
    37  		{
    38  			"8-bit RGBA",
    39  			"fill_test_8bit_rgba.png",
    40  			"fill_test_8bit_rgba_out.png",
    41  			color.RGBA{0, 255, 0, 255},
    42  		},
    43  		{
    44  			"16-bit RGB",
    45  			"fill_test_16bit_rgb.png",
    46  			"fill_test_16bit_rgb_out.png",
    47  			color.RGBA{0, 255, 0, 255},
    48  		},
    49  		{
    50  			"16-bit RGBA",
    51  			"fill_test_16bit_rgba.png",
    52  			"fill_test_16bit_rgba_out.png",
    53  			color.RGBA{0, 255, 0, 255},
    54  		},
    55  	}
    56  
    57  	imgDir, ok := fileutils.FindDir("tests")
    58  	require.True(t, ok)
    59  
    60  	e, err := NewEncoder(EncoderOptions{})
    61  	require.NotNil(t, e)
    62  	require.NoError(t, err)
    63  
    64  	d, err := NewDecoder(DecoderOptions{})
    65  	require.NotNil(t, d)
    66  	require.NoError(t, err)
    67  
    68  	for _, tc := range tcs {
    69  		t.Run(tc.name, func(t *testing.T) {
    70  			inputFile, err := os.Open(imgDir + "/" + tc.inputName)
    71  			require.NoError(t, err)
    72  			require.NotNil(t, inputFile)
    73  			defer inputFile.Close()
    74  
    75  			inputImg, format, err := d.Decode(inputFile)
    76  			require.NoError(t, err)
    77  			require.NotNil(t, inputImg)
    78  			require.Equal(t, "png", format)
    79  
    80  			expectedBytes, err := ioutil.ReadFile(imgDir + "/" + tc.outputName)
    81  			require.NoError(t, err)
    82  
    83  			FillImageTransparency(inputImg, tc.fillColor)
    84  
    85  			var b bytes.Buffer
    86  			err = e.EncodePNG(&b, inputImg)
    87  			require.NoError(t, err)
    88  
    89  			require.Equal(t, expectedBytes, b.Bytes())
    90  		})
    91  	}
    92  
    93  	t.Run("Opaque image", func(t *testing.T) {
    94  		inputFile, err := os.Open(imgDir + "/fill_test_opaque.png")
    95  		require.NoError(t, err)
    96  		require.NotNil(t, inputFile)
    97  		defer inputFile.Close()
    98  
    99  		inputImg, format, err := d.Decode(inputFile)
   100  		require.NoError(t, err)
   101  		require.NotNil(t, inputImg)
   102  		require.Equal(t, "png", format)
   103  
   104  		inputFile.Seek(0, 0)
   105  
   106  		expectedImg, format, err := d.Decode(inputFile)
   107  		require.NoError(t, err)
   108  		require.NotNil(t, expectedImg)
   109  		require.Equal(t, "png", format)
   110  
   111  		FillImageTransparency(inputImg, color.RGBA{0, 255, 0, 255})
   112  
   113  		require.Equal(t, expectedImg, inputImg)
   114  	})
   115  }