1
0

svg_test.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. // Partial content; Simulate limit reader
  22. r = bufreader.New(strings.NewReader(`<svg xmlns="http://www.w3.org/2000/svg">SomethingSomething...`))
  23. typ, err = IsSVG(r)
  24. require.NoError(t, err)
  25. require.Equal(t, SVG, typ)
  26. }
  27. func TestSVGDetectNotSvg(t *testing.T) {
  28. r := bufreader.New(strings.NewReader(`<html><body>Not an SVG</body></html>`))
  29. typ, err := IsSVG(r)
  30. require.NoError(t, err)
  31. require.Equal(t, Unknown, typ)
  32. r = bufreader.New(strings.NewReader(`<?xml version="1.0" encoding="UTF-8"?><not-svg></not-svg>`))
  33. typ, err = IsSVG(r)
  34. require.NoError(t, err)
  35. require.Equal(t, Unknown, typ)
  36. r = bufreader.New(strings.NewReader(`<!-- Only comments -->`))
  37. typ, err = IsSVG(r)
  38. require.NoError(t, err)
  39. require.Equal(t, Unknown, typ)
  40. // Random byte data that does not match SVG
  41. r = bufreader.New(bytes.NewReader([]byte{0x42, 0x4D, 0x3C, 0x3F, 0x78, 0x6D, 0x6C, 0x20}))
  42. typ, err = IsSVG(r)
  43. require.NoError(t, err)
  44. require.Equal(t, Unknown, typ)
  45. }
  46. func TestSVGDetectError(t *testing.T) {
  47. // Should not return an error for io.EOF
  48. r := bufreader.New(errReader{error: io.EOF})
  49. typ, err := IsSVG(r)
  50. require.NoError(t, err)
  51. require.Equal(t, Unknown, typ)
  52. // Should return an error for other read errors
  53. r = bufreader.New(errReader{error: io.ErrClosedPipe})
  54. typ, err = IsSVG(r)
  55. require.ErrorIs(t, err, io.ErrClosedPipe)
  56. require.Equal(t, Unknown, typ)
  57. }