Skip to content

Commit e1e86eb

Browse files
committed
Add File struct
1 parent c904f5a commit e1e86eb

File tree

6 files changed

+76
-16
lines changed

6 files changed

+76
-16
lines changed

kadai2/tanaka0325/imgconv/cmd/imgconv/main.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ func main() {
4040
// convert
4141
for _, path := range paths {
4242
param := imgconv.ConvertParam{
43-
Path: path,
43+
File: imgconv.NewFile(path),
4444
BeforeImage: imgconv.NewImage(*options.From),
4545
AfterImage: imgconv.NewImage(*options.To),
4646
FromExt: *options.From,
@@ -52,7 +52,7 @@ func main() {
5252
onExit(err)
5353
}
5454
} else {
55-
fmt.Printf("%[1]s.%[2]s => %[1]s.%[3]s\n", param.Path, param.FromExt, param.ToExt)
55+
fmt.Printf("%[1]s.%[2]s => %[1]s.%[3]s\n", param.File.Path, param.FromExt, param.ToExt)
5656
}
5757
}
5858
}

kadai2/tanaka0325/imgconv/file.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package imgconv
2+
3+
import (
4+
"io"
5+
"os"
6+
)
7+
8+
type OpenCreator interface {
9+
Open() (io.ReadCloser, error)
10+
Create() (io.WriteCloser, error)
11+
}
12+
13+
type File struct {
14+
Path string
15+
}
16+
17+
func (f File) Open() (io.ReadCloser, error) { return os.Open(f.Path) }
18+
func (f File) Create() (io.WriteCloser, error) { return os.Create(f.Path) }
19+
20+
func NewFile(p string) File {
21+
return File{Path: p}
22+
}

kadai2/tanaka0325/imgconv/image.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,15 +66,15 @@ func (ip ImageTIFF) Encode(w io.Writer, i image.Image) error { return tiff.Encod
6666
func NewImage(ext string) DecodeEncoder {
6767
switch ext {
6868
case "png":
69-
return &ImagePNG{}
69+
return ImagePNG{}
7070
case "jpg", "jpeg":
71-
return &ImageJPEG{}
71+
return ImageJPEG{}
7272
case "gif":
73-
return &ImageGIF{}
73+
return ImageGIF{}
7474
case "bmp":
75-
return &ImageBMP{}
75+
return ImageBMP{}
7676
case "tiff", "tif":
77-
return &ImageTIFF{}
77+
return ImageTIFF{}
7878
}
7979

8080
return nil

kadai2/tanaka0325/imgconv/imgconv.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
11
// Imgconv package is to convert images file format.
22
package imgconv
33

4-
import (
5-
"os"
6-
)
7-
84
type ConvertParam struct {
9-
Path string
5+
File File
106
BeforeImage Decoder
117
AfterImage Encoder
128
FromExt string
@@ -15,7 +11,7 @@ type ConvertParam struct {
1511

1612
func Do(param ConvertParam) (err error) {
1713
// open file
18-
r, err := os.Open(param.Path + "." + param.FromExt)
14+
r, err := param.File.Open()
1915
if err != nil {
2016
return
2117
}
@@ -28,7 +24,7 @@ func Do(param ConvertParam) (err error) {
2824
}
2925

3026
// create file
31-
w, err := os.Create(param.Path + "." + param.ToExt)
27+
w, err := param.File.Create()
3228
if err != nil {
3329
return err
3430
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package imgconv_test
2+
3+
import (
4+
"image"
5+
"io"
6+
"testing"
7+
8+
"github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv"
9+
)
10+
11+
type mockDecoder struct{}
12+
type mockEncoder struct{}
13+
14+
func (m mockDecoder) Decode(io.Reader) (image.Image, error) { return nil, nil }
15+
func (m mockEncoder) Encode(io.Writer, image.Image) error { return nil }
16+
17+
func TestImgConvDo(t *testing.T) {
18+
md := mockDecoder{}
19+
me := mockEncoder{}
20+
21+
tests := []struct {
22+
name string
23+
args imgconv.ConvertParam
24+
isErr bool
25+
}{
26+
{
27+
name: "ok",
28+
args: imgconv.ConvertParam{
29+
BeforeImage: md,
30+
AfterImage: me,
31+
},
32+
},
33+
}
34+
35+
for _, tt := range tests {
36+
t.Run(tt.name, func(t *testing.T) {
37+
err := imgconv.Do(tt.args)
38+
if (tt.isErr && err == nil) || (!tt.isErr && err != nil) {
39+
t.Errorf("expect err = %t, but got err = %s", tt.isErr, err)
40+
}
41+
})
42+
}
43+
}

kadai2/tanaka0325/imgconv/options_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,7 @@ func TestOptionsValidate(t *testing.T) {
4242
From: &jpg,
4343
To: &png,
4444
},
45-
args: allowedList,
46-
isErr: false,
45+
args: allowedList,
4746
},
4847
}
4948

0 commit comments

Comments
 (0)