package magic import ( "errors" "strings" "testing" "sneak.berlin/go/pixa/internal/imagerequest" ) // TestDetectFormat_SVG checks that DetectFormat names SVG text with what may // come before the root element, and does not name as SVG text that does not // start with "<" or has no "` tests := []struct { name string data string wantErr error }{ {name: "root element only", data: root}, {name: "XML declaration", data: `` + "\n" + root}, {name: "byte order mark and white space", data: "\xEF\xBB\xBF \n\t" + root}, {name: "comment", data: "" + root}, { name: "DOCTYPE", data: `` + root, }, { name: "root element after the first bytes", data: "" + root, wantErr: ErrUnknownFormat, }, {name: "text naming ", wantErr: ErrUnknownFormat}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { t.Parallel() got, err := DetectFormat([]byte(tt.data)) t.Logf("DetectFormat() = %q, %v", got, err) if tt.wantErr != nil { if !errors.Is(err, tt.wantErr) { t.Errorf("DetectFormat() error = %v, want %v", err, tt.wantErr) } return } if err != nil || got != imagerequest.FormatSVG { t.Errorf("DetectFormat() = %q, %v; want %q", got, err, imagerequest.FormatSVG) } }) } } // TestValidateMagicBytes_SVG checks that SVG data is SVG for the // Content-Type image/svg+xml, with a charset too, and a mismatch for another. func TestValidateMagicBytes_SVG(t *testing.T) { t.Parallel() data := []byte(``) for _, declared := range []string{"image/svg+xml", "image/svg+xml; charset=utf-8"} { got, err := ValidateMagicBytes(data, declared) if err != nil || got != imagerequest.FormatSVG { t.Errorf("ValidateMagicBytes(%q) = %q, %v; want %q", declared, got, err, imagerequest.FormatSVG) } } _, err := ValidateMagicBytes(data, "image/png") if !errors.Is(err, ErrMagicByteMismatch) { t.Errorf("ValidateMagicBytes(image/png) error = %v, want %v", err, ErrMagicByteMismatch) } }