svg_test.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package svg
  2. import (
  3. "os"
  4. "path/filepath"
  5. "regexp"
  6. "testing"
  7. "github.com/imgproxy/imgproxy/v3/config"
  8. "github.com/imgproxy/imgproxy/v3/imagedata"
  9. "github.com/imgproxy/imgproxy/v3/imagetype"
  10. "github.com/stretchr/testify/require"
  11. "github.com/stretchr/testify/suite"
  12. )
  13. type SvgTestSuite struct {
  14. suite.Suite
  15. }
  16. func (s *SvgTestSuite) SetupSuite() {
  17. config.Reset()
  18. err := imagedata.Init()
  19. require.Nil(s.T(), err)
  20. }
  21. func (s *SvgTestSuite) readTestFile(name string) *imagedata.ImageData {
  22. wd, err := os.Getwd()
  23. require.Nil(s.T(), err)
  24. data, err := os.ReadFile(filepath.Join(wd, "..", "testdata", name))
  25. require.Nil(s.T(), err)
  26. return &imagedata.ImageData{
  27. Type: imagetype.SVG,
  28. Data: data,
  29. Headers: map[string]string{
  30. "Content-Type": "image/svg+xml",
  31. "Cache-Control": "public, max-age=12345",
  32. },
  33. }
  34. }
  35. func (s *SvgTestSuite) TestSanitize() {
  36. origin := s.readTestFile("test1.svg")
  37. expected := s.readTestFile("test1.sanitized.svg")
  38. actual, err := Sanitize(origin)
  39. require.Nil(s.T(), err)
  40. require.Equal(s.T(), string(expected.Data), string(actual.Data))
  41. require.Equal(s.T(), origin.Headers, actual.Headers)
  42. }
  43. func (s *SvgTestSuite) TestFixUnsupportedDropShadow() {
  44. origin := s.readTestFile("test1.drop-shadow.svg")
  45. expected := s.readTestFile("test1.drop-shadow.fixed.svg")
  46. actual, changed, err := FixUnsupported(origin)
  47. // `FixUnsupported` generates random IDs, we need to replace them for the test
  48. re := regexp.MustCompile(`"ds(in|of)-.+?"`)
  49. actualData := re.ReplaceAllString(string(actual.Data), `"ds$1-test"`)
  50. require.Nil(s.T(), err)
  51. require.True(s.T(), changed)
  52. require.Equal(s.T(), string(expected.Data), actualData)
  53. require.Equal(s.T(), origin.Headers, actual.Headers)
  54. }
  55. func (s *SvgTestSuite) TestFixUnsupportedNothingChanged() {
  56. origin := s.readTestFile("test1.svg")
  57. actual, changed, err := FixUnsupported(origin)
  58. require.Nil(s.T(), err)
  59. require.False(s.T(), changed)
  60. require.Equal(s.T(), origin, actual)
  61. }
  62. func TestSvg(t *testing.T) {
  63. suite.Run(t, new(SvgTestSuite))
  64. }