svg_test.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package imagetype
  2. import (
  3. "bytes"
  4. "io"
  5. "strings"
  6. "testing"
  7. "github.com/stretchr/testify/require"
  8. "github.com/imgproxy/imgproxy/v3/bufreader"
  9. )
  10. type errReader struct{ error }
  11. func (r errReader) Read(p []byte) (n int, err error) { return 0, r.error }
  12. func TestSVGDetectSuccess(t *testing.T) {
  13. r := bufreader.New(strings.NewReader(`<svg xmlns="http://www.w3.org/2000/svg"></svg>`))
  14. typ, err := IsSVG(r)
  15. require.NoError(t, err)
  16. require.Equal(t, SVG, typ)
  17. r = bufreader.New(strings.NewReader(`<svg:svg xmlns:svg="http://www.w3.org/2000/svg"></svg:svg>`))
  18. typ, err = IsSVG(r)
  19. require.NoError(t, err)
  20. require.Equal(t, SVG, typ)
  21. }
  22. func TestSVGDetectNotSvg(t *testing.T) {
  23. r := bufreader.New(strings.NewReader(`<html><body>Not an SVG</body></html>`))
  24. typ, err := IsSVG(r)
  25. require.NoError(t, err)
  26. require.Equal(t, Unknown, typ)
  27. r = bufreader.New(strings.NewReader(`<?xml version="1.0" encoding="UTF-8"?><not-svg></not-svg>`))
  28. typ, err = IsSVG(r)
  29. require.NoError(t, err)
  30. require.Equal(t, Unknown, typ)
  31. r = bufreader.New(strings.NewReader(`<!-- Only comments -->`))
  32. typ, err = IsSVG(r)
  33. require.NoError(t, err)
  34. require.Equal(t, Unknown, typ)
  35. // Random byte data that does not match SVG
  36. r = bufreader.New(bytes.NewReader([]byte{0x42, 0x4D, 0x3C, 0x3F, 0x78, 0x6D, 0x6C, 0x20}))
  37. typ, err = IsSVG(r)
  38. require.NoError(t, err)
  39. require.Equal(t, Unknown, typ)
  40. }
  41. func TestSVGDetectError(t *testing.T) {
  42. // Should not return an error for io.EOF
  43. r := bufreader.New(errReader{error: io.EOF})
  44. typ, err := IsSVG(r)
  45. require.NoError(t, err)
  46. require.Equal(t, Unknown, typ)
  47. // Should return an error for other read errors
  48. r = bufreader.New(errReader{error: io.ErrClosedPipe})
  49. typ, err = IsSVG(r)
  50. require.ErrorIs(t, err, io.ErrClosedPipe)
  51. require.Equal(t, Unknown, typ)
  52. }