Skip to content

Commit 9306378

Browse files
committed
Add svg package tests
1 parent 5f3d551 commit 9306378

7 files changed

+131
-36
lines changed

processing_handler_test.go

-23
Original file line numberDiff line numberDiff line change
@@ -324,29 +324,6 @@ func (s *ProcessingHandlerTestSuite) TestSkipProcessingSVG() {
324324
require.True(s.T(), bytes.Equal(expected.Data, actual))
325325
}
326326

327-
func (s *ProcessingHandlerTestSuite) TestPreserveOriginSVGHeaders() {
328-
rw := s.send("/unsafe/rs:fill:4:4/plain/local:///test1.svg")
329-
res := rw.Result()
330-
331-
require.Equal(s.T(), 200, res.StatusCode)
332-
333-
actual := s.readBody(res)
334-
originHeaders := map[string]string{
335-
"Content-Type": "image/svg+xml",
336-
"Cache-Control": "public, max-age=12345",
337-
}
338-
339-
expected, err := svg.Sanitize(&imagedata.ImageData{
340-
Data: s.readTestFile("test1.svg"),
341-
Headers: originHeaders,
342-
})
343-
344-
require.Nil(s.T(), err)
345-
346-
require.True(s.T(), bytes.Equal(expected.Data, actual))
347-
require.Equal(s.T(), originHeaders, expected.Headers)
348-
}
349-
350327
func (s *ProcessingHandlerTestSuite) TestNotSkipProcessingSVGToJPG() {
351328
rw := s.send("/unsafe/rs:fill:4:4/plain/local:///test1.svg@jpg")
352329
res := rw.Result()

svg/svg.go

+11-11
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,17 @@ import (
1515

1616
var feDropShadowName = []byte("feDropShadow")
1717

18-
const feDropShadowTemplate = `
19-
<feMerge result="dsin-%[1]s"><feMergeNode %[3]s /></feMerge>
20-
<feGaussianBlur %[4]s />
21-
<feOffset %[5]s result="dsof-%[2]s" />
22-
<feFlood %[6]s />
23-
<feComposite in2="dsof-%[2]s" operator="in" />
24-
<feMerge %[7]s>
25-
<feMergeNode />
26-
<feMergeNode in="dsin-%[1]s" />
27-
</feMerge>
28-
`
18+
var feDropShadowTemplate = strings.TrimSpace(`
19+
<feMerge result="dsin-%[1]s"><feMergeNode %[3]s /></feMerge>
20+
<feGaussianBlur %[4]s />
21+
<feOffset %[5]s result="dsof-%[2]s" />
22+
<feFlood %[6]s />
23+
<feComposite in2="dsof-%[2]s" operator="in" />
24+
<feMerge %[7]s>
25+
<feMergeNode />
26+
<feMergeNode in="dsin-%[1]s" />
27+
</feMerge>
28+
`)
2929

3030
func Sanitize(data *imagedata.ImageData) (*imagedata.ImageData, error) {
3131
r := bytes.NewReader(data.Data)

svg/svg_test.go

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

testdata/test1.drop-shadow.fixed.svg

+17
Loading

testdata/test1.drop-shadow.svg

+9
Loading

testdata/test1.sanitized.svg

+4
Loading

testdata/test1.svg

+7-2
Loading

0 commit comments

Comments
 (0)