Forráskód Böngészése

add a FormatFromExtension helper

oliverpool 7 éve
szülő
commit
b5a6a21ce3
2 módosított fájl, 53 hozzáadás és 4 törlés
  1. 10 4
      helpers.go
  2. 43 0
      helpers_test.go

+ 10 - 4
helpers.go

@@ -57,16 +57,22 @@ var formatFromExt = map[string]Format{
 	".gif":  GIF,
 }
 
-// FormatFromFilename parses image format from filename extension:
+// FormatFromExtension parses image format from extension:
 // "jpg" (or "jpeg"), "png", "gif", "tif" (or "tiff") and "bmp" are supported.
-func FormatFromFilename(filename string) (Format, error) {
-	ext := strings.ToLower(filepath.Ext(filename))
-	if f, ok := formatFromExt[ext]; ok {
+func FormatFromExtension(ext string) (Format, error) {
+	if f, ok := formatFromExt["."+strings.ToLower(strings.TrimPrefix(ext, "."))]; ok {
 		return f, nil
 	}
 	return -1, ErrUnsupportedFormat
 }
 
+// FormatFromFilename parses image format from filename extension:
+// "jpg" (or "jpeg"), "png", "gif", "tif" (or "tiff") and "bmp" are supported.
+func FormatFromFilename(filename string) (Format, error) {
+	ext := filepath.Ext(filename)
+	return FormatFromExtension(ext)
+}
+
 var (
 	// ErrUnsupportedFormat means the given image format (or file extension) is unsupported.
 	ErrUnsupportedFormat = errors.New("imaging: unsupported image format")

+ 43 - 0
helpers_test.go

@@ -502,3 +502,46 @@ func TestClone(t *testing.T) {
 		})
 	}
 }
+
+func TestFormatFromExtension(t *testing.T) {
+	testCases := []struct {
+		name string
+		ext  string
+		want Format
+		err  error
+	}{
+		{
+			name: "jpg without leading dot",
+			ext:  "jpg",
+			want: JPEG,
+		},
+		{
+			name: "jpg with leading dot",
+			ext:  ".jpg",
+			want: JPEG,
+		},
+		{
+			name: "jpg uppercase",
+			ext:  ".JPG",
+			want: JPEG,
+		},
+		{
+			name: "unsupported",
+			ext:  ".unsupportedextension",
+			want: -1,
+			err:  ErrUnsupportedFormat,
+		},
+	}
+
+	for _, tc := range testCases {
+		t.Run(tc.name, func(t *testing.T) {
+			got, err := FormatFromExtension(tc.ext)
+			if err != tc.err {
+				t.Errorf("got error %#v want %#v", err, tc.err)
+			}
+			if got != tc.want {
+				t.Errorf("got result %#v want %#v", got, tc.want)
+			}
+		})
+	}
+}