1
0
mirror of https://github.com/imgproxy/imgproxy.git synced 2026-05-16 09:18:09 +02:00
Files
imgproxy/svg/svg_test.go
T
2023-07-04 18:34:18 +03:00

84 lines
2.0 KiB
Go

package svg
import (
"os"
"path/filepath"
"regexp"
"testing"
"github.com/imgproxy/imgproxy/v3/config"
"github.com/imgproxy/imgproxy/v3/imagedata"
"github.com/imgproxy/imgproxy/v3/imagetype"
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/suite"
)
type SvgTestSuite struct {
suite.Suite
}
func (s *SvgTestSuite) SetupSuite() {
config.Reset()
err := imagedata.Init()
require.Nil(s.T(), err)
}
func (s *SvgTestSuite) readTestFile(name string) *imagedata.ImageData {
wd, err := os.Getwd()
require.Nil(s.T(), err)
data, err := os.ReadFile(filepath.Join(wd, "..", "testdata", name))
require.Nil(s.T(), err)
return &imagedata.ImageData{
Type: imagetype.SVG,
Data: data,
Headers: map[string]string{
"Content-Type": "image/svg+xml",
"Cache-Control": "public, max-age=12345",
},
}
}
func (s *SvgTestSuite) TestSanitize() {
origin := s.readTestFile("test1.svg")
expected := s.readTestFile("test1.sanitized.svg")
actual, err := Sanitize(origin)
require.Nil(s.T(), err)
require.Equal(s.T(), string(expected.Data), string(actual.Data))
require.Equal(s.T(), origin.Headers, actual.Headers)
}
func (s *SvgTestSuite) TestFixUnsupportedDropShadow() {
origin := s.readTestFile("test1.drop-shadow.svg")
expected := s.readTestFile("test1.drop-shadow.fixed.svg")
actual, changed, err := FixUnsupported(origin)
// `FixUnsupported` generates random IDs, we need to replace them for the test
re := regexp.MustCompile(`"ds(in|of)-.+?"`)
actualData := re.ReplaceAllString(string(actual.Data), `"ds$1-test"`)
require.Nil(s.T(), err)
require.True(s.T(), changed)
require.Equal(s.T(), string(expected.Data), actualData)
require.Equal(s.T(), origin.Headers, actual.Headers)
}
func (s *SvgTestSuite) TestFixUnsupportedNothingChanged() {
origin := s.readTestFile("test1.svg")
actual, changed, err := FixUnsupported(origin)
require.Nil(s.T(), err)
require.False(s.T(), changed)
require.Equal(s.T(), origin, actual)
}
func TestSvg(t *testing.T) {
suite.Run(t, new(SvgTestSuite))
}