package imagetype
import (
"bytes"
"io"
"strings"
"testing"
"github.com/stretchr/testify/require"
"github.com/imgproxy/imgproxy/v3/bufreader"
)
type errReader struct{ error }
func (r errReader) Read(p []byte) (n int, err error) { return 0, r.error }
func TestSVGDetectSuccess(t *testing.T) {
r := bufreader.New(strings.NewReader(``))
typ, err := IsSVG(r)
require.NoError(t, err)
require.Equal(t, SVG, typ)
r = bufreader.New(strings.NewReader(``))
typ, err = IsSVG(r)
require.NoError(t, err)
require.Equal(t, SVG, typ)
}
func TestSVGDetectNotSvg(t *testing.T) {
r := bufreader.New(strings.NewReader(`
Not an SVG`))
typ, err := IsSVG(r)
require.NoError(t, err)
require.Equal(t, Unknown, typ)
r = bufreader.New(strings.NewReader(``))
typ, err = IsSVG(r)
require.NoError(t, err)
require.Equal(t, Unknown, typ)
r = bufreader.New(strings.NewReader(``))
typ, err = IsSVG(r)
require.NoError(t, err)
require.Equal(t, Unknown, typ)
// Random byte data that does not match SVG
r = bufreader.New(bytes.NewReader([]byte{0x42, 0x4D, 0x3C, 0x3F, 0x78, 0x6D, 0x6C, 0x20}))
typ, err = IsSVG(r)
require.NoError(t, err)
require.Equal(t, Unknown, typ)
}
func TestSVGDetectError(t *testing.T) {
// Should not return an error for io.EOF
r := bufreader.New(errReader{error: io.EOF})
typ, err := IsSVG(r)
require.NoError(t, err)
require.Equal(t, Unknown, typ)
// Should return an error for other read errors
r = bufreader.New(errReader{error: io.ErrClosedPipe})
typ, err = IsSVG(r)
require.ErrorIs(t, err, io.ErrClosedPipe)
require.Equal(t, Unknown, typ)
}