From f9b86f445d631bd49bc83c29de281c94a39f38a4 Mon Sep 17 00:00:00 2001
From: ensiouel <ensiouel@gmail.com>
Date: Thu, 23 Nov 2023 13:15:58 +0300
Subject: [PATCH] =?UTF-8?q?=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?=
 =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=82=D0=B5=D1=81=D1=82=D0=BE=D0=B2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 pkg/images/imgconv/default_format.go |  6 +--
 pkg/images/imgconv/imgconv.go        | 10 +----
 pkg/images/imgconv/imgconv_test.go   | 60 ++++++++++++++++++++--------
 pkg/images/imgconv/webp_test.go      |  2 +-
 4 files changed, 49 insertions(+), 29 deletions(-)

diff --git a/pkg/images/imgconv/default_format.go b/pkg/images/imgconv/default_format.go
index e8e5bd27..389df4ea 100644
--- a/pkg/images/imgconv/default_format.go
+++ b/pkg/images/imgconv/default_format.go
@@ -20,9 +20,9 @@ const (
 )
 
 func init() {
-	RegisterFormatEncoder(JPEG, func(w io.Writer, img image.Image) error { return jpeg.Encode(w, img, nil) }, "jpg", "jpeg")
-	RegisterFormatEncoder(PNG, png.Encode, "png")
+	RegisterFormatEncoder(JPEG, func(w io.Writer, img image.Image) error { return jpeg.Encode(w, img, nil) }, "jpg")
+	RegisterFormatEncoder(PNG, png.Encode)
 	RegisterFormatEncoder(GIF, func(w io.Writer, img image.Image) error { return gif.Encode(w, img, nil) })
-	RegisterFormatEncoder(TIFF, func(w io.Writer, img image.Image) error { return tiff.Encode(w, img, nil) })
+	RegisterFormatEncoder(TIFF, func(w io.Writer, img image.Image) error { return tiff.Encode(w, img, nil) }, "tif")
 	RegisterFormatEncoder(BMP, bmp.Encode)
 }
diff --git a/pkg/images/imgconv/imgconv.go b/pkg/images/imgconv/imgconv.go
index 7944a619..ad8e6b56 100644
--- a/pkg/images/imgconv/imgconv.go
+++ b/pkg/images/imgconv/imgconv.go
@@ -21,6 +21,7 @@ var (
 
 func RegisterFormatEncoder(format Format, fn EncodeFunc, extensions ...string) {
 	defaultFormatEncoderRegistry[format] = fn
+	formatExtensions[string(format)] = format
 	for _, ext := range extensions {
 		formatExtensions[strings.TrimPrefix(strings.ToLower(ext), ".")] = format
 	}
@@ -66,12 +67,3 @@ func FormatFromExtension(ext string) (Format, error) {
 	}
 	return "", errors.Errorf("unsupported format")
 }
-
-//func NormalizeFormat(format string) string {
-//	format = strings.ToLower(format)
-//	format = strings.TrimPrefix(format, ".")
-//	//if v, ok := builtinFormats[format]; ok {
-//	//	return v
-//	//}
-//	return format
-//}
diff --git a/pkg/images/imgconv/imgconv_test.go b/pkg/images/imgconv/imgconv_test.go
index 4ee0f219..13660d7b 100644
--- a/pkg/images/imgconv/imgconv_test.go
+++ b/pkg/images/imgconv/imgconv_test.go
@@ -15,24 +15,52 @@ func TestOpen(t *testing.T) {
 		return
 	}
 	require.NoError(t, err)
-	require.Equal(t, JPEG, ext)
+	require.Equal(t, "jpeg", ext)
 }
 
-func TestNormalizeFormat(t *testing.T) {
-	require.Equal(t, NormalizeFormat("jpg"), JPEG)
-	require.Equal(t, NormalizeFormat("png"), PNG)
-	require.Equal(t, NormalizeFormat("tif"), TIFF)
-	require.Equal(t, NormalizeFormat("any"), "any")
-	require.Equal(t, NormalizeFormat(".jpg"), JPEG)
-	require.Equal(t, NormalizeFormat(".gif"), GIF)
-	require.Equal(t, NormalizeFormat(".bmp"), BMP)
-	require.Equal(t, NormalizeFormat(".any"), "any")
+func TestFormatFromExtension(t *testing.T) {
+	var tests = []struct {
+		name    string
+		input   string
+		output  Format
+		wantErr bool
+	}{
+		{
+			name:    "correct jpeg",
+			input:   "jpg",
+			output:  JPEG,
+			wantErr: false,
+		},
+		{
+			name:    "correct png",
+			input:   "png",
+			output:  PNG,
+			wantErr: false,
+		},
+		{
+			name:    "incorrect any",
+			input:   "any",
+			wantErr: true,
+		},
+	}
+
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			format, err := FormatFromExtension(tt.input)
+			if tt.wantErr {
+				require.Error(t, err)
+			} else {
+				require.NoError(t, err)
+				require.Equal(t, tt.output, format)
+			}
+		})
+	}
 }
 
 func TestEncode(t *testing.T) {
 	var tests = []struct {
 		name    string
-		input   string
+		input   Format
 		wantErr bool
 	}{
 		{
@@ -95,31 +123,31 @@ func TestDecode(t *testing.T) {
 		{
 			name:    "jpeg format",
 			input:   "testdata/1.jpeg",
-			output:  JPEG,
+			output:  "jpeg",
 			wantErr: false,
 		},
 		{
 			name:    "png format",
 			input:   "testdata/1.png",
-			output:  PNG,
+			output:  "png",
 			wantErr: false,
 		},
 		{
 			name:    "gif format",
 			input:   "testdata/1.gif",
-			output:  GIF,
+			output:  "gif",
 			wantErr: false,
 		},
 		{
 			name:    "tiff format",
 			input:   "testdata/1.tiff",
-			output:  TIFF,
+			output:  "tiff",
 			wantErr: false,
 		},
 		{
 			name:    "bmp format",
 			input:   "testdata/1.bmp",
-			output:  BMP,
+			output:  "bmp",
 			wantErr: false,
 		},
 	}
diff --git a/pkg/images/imgconv/webp_test.go b/pkg/images/imgconv/webp_test.go
index 4574bfbd..b244d152 100644
--- a/pkg/images/imgconv/webp_test.go
+++ b/pkg/images/imgconv/webp_test.go
@@ -26,5 +26,5 @@ func TestDecodeWebP(t *testing.T) {
 	defer file.Close()
 	_, ext, err := Decode(file)
 	require.NoError(t, err)
-	require.Equal(t, WEBP, ext)
+	require.Equal(t, "webp", ext)
 }
-- 
GitLab