diff --git a/kadai2/InoAyaka/README.md b/kadai2/InoAyaka/README.md
new file mode 100644
index 0000000..81ff5e0
--- /dev/null
+++ b/kadai2/InoAyaka/README.md
@@ -0,0 +1,87 @@
+# <課題2>【TRY】io.Readerとio.Writer
+## 概要
+### io.Readerとio.Writerについて調べてみよう
+
+- 標準パッケージでどのように使われているか
+- io.Readerとio.Writerがあることで、どういう利点があるのか具体例を挙げて考えてみる
+
+### 調べてみた結果
+
+
+長くなってしまったため、折りたたみ
+
+#### io.Readerとは
+なんらかのバイト列の入力を抽象化するための基本的なインタフェース
+メソッドには、Read()が定義されている
+
+#### io.Writerとは
+なんらかのバイト列の出力を抽象化するための基本的なインタフェース
+メソッドには、Write()が定義されている
+
+#### io.Reader、io.Writerを実装している標準パッケージ
+方法)godoc -analysis=type で確認
+※goModuleモードは対応していないため、一時GOPATHモードにして実施>
+
+os.File
+pipe
+bytes.Buffer などなど
+
+#### 標準パッケージでどのように使っているか
+os.File はReadとWriteを実装している
+func (f *File) Read(b []byte) (n int, err error)
+func (f *File) Write(b []byte) (n int, err error)
+→ io.Readerまたはio.Writerを引数に指定している関数にos.Fileを渡すことができる
+
+
+#### どういう利点があるのか
+標準入力、標準出力、ファイル、ネットワーク、その他さまざまな入力処理、出力処理において
+io.Reader、io.Writerという共通の型で扱うことができる → 共通化が実現できる
+
+例えば、標準入出力、ファイル、ネットワークなんに関しても同じような処理を行う場合には、
+引数にio.Readerもしくはio.Writer を指定してあげると良い
+
+
+また、io.Writer、io.Readerがさまざまな入出力を共通化しているので、
+テスト等により出力先を一時的に変えたいといった場合にも、以下のように変更することができる
+
+``` 例
+//この変数outをtestファイルで上書きする
+var out io.Writer = os.Stdout
+fmt.Fprintln(out,string.Join(args,sep))
+```
+
+
+
+
+# <課題2>【TRY】テストを書いてみよう
+## 概要
+### 1回目の課題のテストを作ってみて下さい
+
+- テストのしやすさを考えてリファクタリングしてみる
+- テストのカバレッジを取ってみる
+- テーブル駆動テストを行う
+- テストヘルパーを作ってみる
+
+### 動作手順
+```
+$ go test ./...
+
+# HTMLにカバレッジを保存する場合
+$ go test -coverprofile=cover.out ./...
+$ go tool cover -html=cover.out -o cover.html
+```
+
+### カバレッジ
+[cover.html](https://github.com/gopherdojo/dojo8/blob/kadai2-InoAyaka/kadai2/InoAyaka/cover.html) 参照
+
+
+##### 補足事項
+(testdataディレクトリ配下に入っているテスト用イメージについて)
+オリジナルのThe Go gopher(Gopherくん)は、Renée Frenchによってデザインされました。
+
+
+### 感想
+- カバレッジをあげるために、どのように工夫すればいいのか試行錯誤といった感じでした
+- テストヘルパーについても、正直もう少しスッキリとした形にできるのではないか...といった感じになってしまいました
+- テスト全般において、他の方のコードも参考にもっと勉強が必要だなと強く感じました
+
diff --git a/kadai2/InoAyaka/converter/converter.go b/kadai2/InoAyaka/converter/converter.go
new file mode 100644
index 0000000..4b00b48
--- /dev/null
+++ b/kadai2/InoAyaka/converter/converter.go
@@ -0,0 +1,78 @@
+//Package converter は指定されたパスに対し、画像変換を行います。
+//(対応形式:jpg,png,gif,bmp,tiff)
+package converter
+
+import (
+ "fmt"
+ "image"
+ "image/gif"
+ "image/jpeg"
+ "image/png"
+ "os"
+ "regexp"
+ "strings"
+
+ "golang.org/x/image/bmp"
+ "golang.org/x/image/tiff"
+)
+
+//Args ImageConverter()を使う際に指定が必要となる引数
+type Args struct {
+ FilePath string //変換対象となるファイル名
+ BeforeFormat string //変換前 画像形式
+ AfterFormat string //変換後 画像形式
+}
+
+//ImageConverter 指定した画像形式に変換を行います。
+func ImageConverter(a Args) error {
+
+ f, err := os.Open(a.FilePath)
+ if err != nil {
+ return fmt.Errorf("%s", err)
+ }
+ defer f.Close()
+
+ //ファイルオブジェクトを画像オブジェクトに変換
+ img, _, err := image.Decode(f)
+ if err != nil {
+ return fmt.Errorf("%w : %s", err, f.Name())
+ }
+
+ //変換後のファイルパス
+ rep := regexp.MustCompile("(?i)" + a.BeforeFormat + "$")
+ outFilePath := rep.ReplaceAllString(f.Name(), a.AfterFormat)
+
+ //変換後ファイルの新規作成
+ out, err := os.Create(outFilePath)
+ if err != nil {
+ return fmt.Errorf("%w : %s", err, f.Name())
+ }
+
+ //変換する画像形式に応じてエンコードする
+ switch strings.ToLower(a.AfterFormat) {
+ case "jpg":
+ err = jpeg.Encode(out, img, &jpeg.Options{Quality: jpeg.DefaultQuality})
+ case "png":
+ err = png.Encode(out, img)
+ case "gif":
+ err = gif.Encode(out, img, &gif.Options{NumColors: 256, Quantizer: nil, Drawer: nil})
+ case "bmp":
+ err = bmp.Encode(out, img)
+ case "tiff":
+ err = tiff.Encode(out, img, &tiff.Options{Compression: 0, Predictor: true})
+ default:
+ return fmt.Errorf("The specified image format is not supported. : " + f.Name())
+ }
+
+ //エンコード時にエラーが返ってきていないかチェック
+ if err != nil {
+ return fmt.Errorf("%w : %s", err, out.Name())
+ }
+
+ if err := out.Close(); err != nil {
+ return fmt.Errorf("%w : %s", err, out.Name())
+ }
+
+ return nil
+
+}
diff --git a/kadai2/InoAyaka/converter/converter_test.go b/kadai2/InoAyaka/converter/converter_test.go
new file mode 100644
index 0000000..6d2df35
--- /dev/null
+++ b/kadai2/InoAyaka/converter/converter_test.go
@@ -0,0 +1,60 @@
+package converter
+
+import (
+ "fmt"
+ "testing"
+)
+
+func TestImageConverter(t *testing.T) {
+
+ var tests = []struct {
+ args Args
+ wantErr bool
+ want string
+ }{
+ {Args{FilePath: "../testdata/301_toJpg/_JR6xY.tiff", BeforeFormat: "tiff", AfterFormat: "jpg"},
+ false, ""},
+ {Args{FilePath: "../testdata/302_toPng/XvMdoh.bmp", BeforeFormat: "bmp", AfterFormat: "png"},
+ false, ""},
+ {Args{FilePath: "../testdata/303_toGif/gophercolor.png", BeforeFormat: "png", AfterFormat: "gif"},
+ false, ""},
+ {Args{FilePath: "../testdata/304_toBmp/XvMdoh.gif", BeforeFormat: "gif", AfterFormat: "bmp"},
+ false, ""},
+ {Args{FilePath: "../testdata/305_toTiff/vMfDls.jpg", BeforeFormat: "jpg", AfterFormat: "tiff"},
+ false, ""},
+
+ {Args{FilePath: "../testdata/391_notSupport/vMfDls.jpg", BeforeFormat: "jpg", AfterFormat: "HEIC"},
+ true, "The specified image format is not supported. : ../testdata/391_notSupport/vMfDls.jpg"},
+ {Args{FilePath: "../testdata/392_openError/vMfDls.jpg", BeforeFormat: "jpg", AfterFormat: "png"},
+ true, "open ../testdata/392_openError/vMfDls.jpg: no such file or directory"},
+ {Args{FilePath: "../testdata/393_decordError/notImage.jpg", BeforeFormat: "jpg", AfterFormat: "png"},
+ true, "image: unknown format : ../testdata/393_decordError/notImage.jpg"},
+ {Args{FilePath: "../testdata/394_createError/gophercolor.jpg", BeforeFormat: "jpg", AfterFormat: "png"},
+ true, "open ../testdata/394_createError/gophercolor.png: permission denied : ../testdata/394_createError/gophercolor.jpg"},
+ //{Args{FilePath: "../testdata/395_encordError", BeforeFormat: "jpg", AfterFormat: "png"},
+ // true, ""},
+ //{Args{FilePath: "../testdata/396_closeError", BeforeFormat: "jpg", AfterFormat: "png"},
+ // true, ""},
+ }
+
+ for _, test := range tests {
+ //失敗時にどのテストのどの引数で起きたのかを分かるようにする
+ descr := fmt.Sprintf("ImageConverter(%v)", test.args)
+
+ err := ImageConverter(test.args)
+
+ switch {
+ //エラー発生しないケースだが、エラーが発生した場合
+ case !test.wantErr && err != nil:
+ t.Errorf("want no err , %s = %q ", descr, err)
+ //エラーが発生するケースだが、エラーが発生しない場合
+ case test.wantErr && err == nil:
+ t.Errorf("want err , %s = %q ", descr, err)
+ //エラーが発生するケースで、エラー内容が異なる場合
+ case test.wantErr && err.Error() != test.want:
+ t.Errorf("%s = %q ,want %q", descr, err.Error(), test.want)
+
+ }
+
+ }
+}
diff --git a/kadai2/InoAyaka/cover.html b/kadai2/InoAyaka/cover.html
new file mode 100644
index 0000000..329dfca
--- /dev/null
+++ b/kadai2/InoAyaka/cover.html
@@ -0,0 +1,283 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ not tracked
+
+ not covered
+ covered
+
+
+
+
+
+
//Package converter は指定されたパスに対し、画像変換を行います。
+//(対応形式:jpg,png,gif,bmp,tiff)
+package converter
+
+import (
+ "fmt"
+ "image"
+ "image/gif"
+ "image/jpeg"
+ "image/png"
+ "os"
+ "regexp"
+ "strings"
+
+ "golang.org/x/image/bmp"
+ "golang.org/x/image/tiff"
+)
+
+//Args ImageConverter()を使う際に指定が必要となる引数
+type Args struct {
+ FilePath string //変換対象となるファイル名
+ BeforeFormat string //変換前 画像形式
+ AfterFormat string //変換後 画像形式
+}
+
+//ImageConverter 指定した画像形式に変換を行います。
+func ImageConverter(a Args) error {
+
+ f, err := os.Open(a.FilePath)
+ if err != nil {
+ return fmt.Errorf("%s", err)
+ }
+ defer f.Close()
+
+ //ファイルオブジェクトを画像オブジェクトに変換
+ img, _, err := image.Decode(f)
+ if err != nil {
+ return fmt.Errorf("%w : %s", err, f.Name())
+ }
+
+ //変換後のファイルパス
+ rep := regexp.MustCompile("(?i)" + a.BeforeFormat + "$")
+ outFilePath := rep.ReplaceAllString(f.Name(), a.AfterFormat)
+
+ //変換後ファイルの新規作成
+ out, err := os.Create(outFilePath)
+ if err != nil {
+ return fmt.Errorf("%w : %s", err, f.Name())
+ }
+
+ //変換する画像形式に応じてエンコードする
+ switch strings.ToLower(a.AfterFormat) {
+ case "jpg":
+ err = jpeg.Encode(out, img, &jpeg.Options{Quality: jpeg.DefaultQuality})
+ case "png":
+ err = png.Encode(out, img)
+ case "gif":
+ err = gif.Encode(out, img, &gif.Options{NumColors: 256, Quantizer: nil, Drawer: nil})
+ case "bmp":
+ err = bmp.Encode(out, img)
+ case "tiff":
+ err = tiff.Encode(out, img, &tiff.Options{Compression: 0, Predictor: true})
+ default:
+ return fmt.Errorf("The specified image format is not supported. : " + f.Name())
+ }
+
+ //エンコード時にエラーが返ってきていないかチェック
+ if err != nil {
+ return fmt.Errorf("%w : %s", err, out.Name())
+ }
+
+ if err := out.Close(); err != nil {
+ return fmt.Errorf("%w : %s", err, out.Name())
+ }
+
+ return nil
+
+}
+
+
+
//画像変換を行います。
+package main
+
+import (
+ "flag"
+ "fmt"
+ "io"
+ "os"
+ "path/filepath"
+ "strings"
+
+ "github.com/gopherdojo/dojo8/kadai2/InoAyaka/converter"
+)
+
+//オプション指定
+var bf = flag.String("bf", "jpg", "Image format before conversion")
+var af = flag.String("af", "png", "Image format after conversion")
+var dir = flag.String("dir", "", "Directory containing images to be converted")
+
+//テスト中は出力先を変更できるよう、パッケージレベルとする
+var outErr io.Writer = os.Stderr
+
+const (
+ exitCodeSuccess = 0
+ exitCodeErr = 1
+)
+
+func main() {
+ if errCode := run(); errCode == exitCodeErr {
+ os.Exit(exitCodeErr)
+ }
+}
+
+//
+func run() int {
+ //オプションの解析
+ flag.Parse()
+
+ //入力されたディレクトリのチェックをかける
+ if err := checkDir(*dir); err != nil {
+ fmt.Fprintln(outErr, err)
+ return exitCodeErr
+ }
+
+ if err := convert(*bf, *af, *dir); err != nil {
+ fmt.Fprintln(outErr, err)
+ return exitCodeErr
+ }
+
+ return exitCodeSuccess
+}
+
+//checkDir 指定されたディレクトリのチェックを行います。
+//チェック内容:引数の値、ディレクトリの存在、ディレクトリを表しているか
+func checkDir(dir string) error {
+ //引数の数チェック
+ if dir == "" {
+ return fmt.Errorf("No directory specified")
+ }
+
+ //ディレクトリの存在チェック & ディレクトリを表しているかどうか
+ if m, err := os.Stat(dir); os.IsNotExist(err) {
+ return err
+ } else if !m.IsDir() {
+ return fmt.Errorf("%s : not a directory", dir)
+ }
+
+ return nil
+
+}
+
+//convert 指定ディレクトリに対し、画像変換を行います。
+func convert(bf string, af string, dir string) error {
+
+ ca := converter.Args{
+ BeforeFormat: strings.ToLower(bf),
+ AfterFormat: strings.ToLower(af),
+ }
+
+ //ディレクトリを再帰的にチェック
+ err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
+
+ //対象の画像形式のみ画像変換ImageConverter()の実行
+ if strings.ToLower(filepath.Ext(path)) == "."+bf {
+ ca.FilePath = path
+ if err := converter.ImageConverter(ca); err != nil {
+ //エラーが返ってきても、エラーを表示しプログラムは続行
+ fmt.Fprintln(outErr, err)
+ }
+ }
+ return nil
+ })
+
+ if err != nil {
+ return err
+ }
+
+ return nil
+}
+
+
+
+
+
+
diff --git a/kadai2/InoAyaka/cover.out b/kadai2/InoAyaka/cover.out
new file mode 100644
index 0000000..c133262
--- /dev/null
+++ b/kadai2/InoAyaka/cover.out
@@ -0,0 +1,41 @@
+mode: set
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/imageConv.go:28.13,29.46 1 0
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/imageConv.go:29.46,31.3 1 0
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/imageConv.go:35.16,40.39 2 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/imageConv.go:45.2,45.48 1 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/imageConv.go:50.2,50.24 1 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/imageConv.go:40.39,43.3 2 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/imageConv.go:45.48,48.3 2 0
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/imageConv.go:55.33,57.15 1 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/imageConv.go:62.2,62.48 1 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/imageConv.go:68.2,68.12 1 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/imageConv.go:57.15,59.3 1 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/imageConv.go:62.48,64.3 1 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/imageConv.go:64.8,64.23 1 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/imageConv.go:64.23,66.3 1 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/imageConv.go:73.54,81.81 2 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/imageConv.go:94.2,94.16 1 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/imageConv.go:98.2,98.12 1 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/imageConv.go:81.81,84.52 1 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/imageConv.go:91.3,91.13 1 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/imageConv.go:84.52,86.55 2 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/imageConv.go:86.55,89.5 1 0
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/imageConv.go:94.16,96.3 1 0
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/converter/converter.go:27.35,30.16 2 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/converter/converter.go:33.2,37.16 3 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/converter/converter.go:42.2,47.16 4 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/converter/converter.go:52.2,52.40 1 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/converter/converter.go:68.2,68.16 1 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/converter/converter.go:72.2,72.36 1 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/converter/converter.go:76.2,76.12 1 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/converter/converter.go:30.16,32.3 1 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/converter/converter.go:37.16,39.3 1 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/converter/converter.go:47.16,49.3 1 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/converter/converter.go:53.13,54.75 1 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/converter/converter.go:55.13,56.29 1 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/converter/converter.go:57.13,58.88 1 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/converter/converter.go:59.13,60.29 1 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/converter/converter.go:61.14,62.78 1 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/converter/converter.go:63.10,64.82 1 1
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/converter/converter.go:68.16,70.3 1 0
+github.com/gopherdojo/dojo8/kadai2/InoAyaka/converter/converter.go:72.36,74.3 1 0
diff --git a/kadai2/InoAyaka/go.mod b/kadai2/InoAyaka/go.mod
new file mode 100644
index 0000000..fc6fa47
--- /dev/null
+++ b/kadai2/InoAyaka/go.mod
@@ -0,0 +1,5 @@
+module github.com/gopherdojo/dojo8/kadai2/InoAyaka
+
+go 1.14
+
+require golang.org/x/image v0.0.0-20200618115811-c13761719519
diff --git a/kadai2/InoAyaka/go.sum b/kadai2/InoAyaka/go.sum
new file mode 100644
index 0000000..83da957
--- /dev/null
+++ b/kadai2/InoAyaka/go.sum
@@ -0,0 +1,4 @@
+github.com/gopherdojo/dojo8 v0.0.0-20200703052727-6a79d18126bf h1:lpYevjFQMxI5VNBc3WXV6Z5pDDrdppdDKwmeBoyt5BE=
+golang.org/x/image v0.0.0-20200618115811-c13761719519 h1:1e2ufUJNM3lCHEY5jIgac/7UTjd6cgJNdatjPdFWf34=
+golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
diff --git a/kadai2/InoAyaka/imageConv.go b/kadai2/InoAyaka/imageConv.go
new file mode 100644
index 0000000..edd4b34
--- /dev/null
+++ b/kadai2/InoAyaka/imageConv.go
@@ -0,0 +1,99 @@
+//画像変換を行います。
+package main
+
+import (
+ "flag"
+ "fmt"
+ "io"
+ "os"
+ "path/filepath"
+ "strings"
+
+ "github.com/gopherdojo/dojo8/kadai2/InoAyaka/converter"
+)
+
+//オプション指定
+var bf = flag.String("bf", "jpg", "Image format before conversion")
+var af = flag.String("af", "png", "Image format after conversion")
+var dir = flag.String("dir", "", "Directory containing images to be converted")
+
+//テスト中は出力先を変更できるよう、パッケージレベルとする
+var outErr io.Writer = os.Stderr
+
+const (
+ exitCodeSuccess = 0
+ exitCodeErr = 1
+)
+
+func main() {
+ if errCode := run(); errCode == exitCodeErr {
+ os.Exit(exitCodeErr)
+ }
+}
+
+//
+func run() int {
+ //オプションの解析
+ flag.Parse()
+
+ //入力されたディレクトリのチェックをかける
+ if err := checkDir(*dir); err != nil {
+ fmt.Fprintln(outErr, err)
+ return exitCodeErr
+ }
+
+ if err := convert(*bf, *af, *dir); err != nil {
+ fmt.Fprintln(outErr, err)
+ return exitCodeErr
+ }
+
+ return exitCodeSuccess
+}
+
+//checkDir 指定されたディレクトリのチェックを行います。
+//チェック内容:引数の値、ディレクトリの存在、ディレクトリを表しているか
+func checkDir(dir string) error {
+ //引数の数チェック
+ if dir == "" {
+ return fmt.Errorf("No directory specified")
+ }
+
+ //ディレクトリの存在チェック & ディレクトリを表しているかどうか
+ if m, err := os.Stat(dir); os.IsNotExist(err) {
+ return err
+ } else if !m.IsDir() {
+ return fmt.Errorf("%s : not a directory", dir)
+ }
+
+ return nil
+
+}
+
+//convert 指定ディレクトリに対し、画像変換を行います。
+func convert(bf string, af string, dir string) error {
+
+ ca := converter.Args{
+ BeforeFormat: strings.ToLower(bf),
+ AfterFormat: strings.ToLower(af),
+ }
+
+ //ディレクトリを再帰的にチェック
+ err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
+
+ //対象の画像形式のみ画像変換ImageConverter()の実行
+ if strings.ToLower(filepath.Ext(path)) == "."+bf {
+ ca.FilePath = path
+ if err := converter.ImageConverter(ca); err != nil {
+ //エラーが返ってきても、エラーを表示しプログラムは続行
+ fmt.Fprintln(outErr, err)
+ }
+ }
+ return nil
+ })
+
+ if err != nil {
+ return err
+ }
+
+ return nil
+}
diff --git a/kadai2/InoAyaka/imageConv_test.go b/kadai2/InoAyaka/imageConv_test.go
new file mode 100644
index 0000000..a09d2e5
--- /dev/null
+++ b/kadai2/InoAyaka/imageConv_test.go
@@ -0,0 +1,122 @@
+package main
+
+import (
+ "bytes"
+ "flag"
+ "fmt"
+ "testing"
+)
+
+func TestRun(t *testing.T) {
+ var tests = []struct {
+ bf string
+ af string
+ dir string
+ wantErr bool
+ want string
+ }{
+ {"tiff", "jpg", "./testdata/101_success", false, ""},
+ {"jpg", "png", "./testdata/192_noDir", true, "stat ./testdata/192_noDir: no such file or directory\n"},
+ }
+
+ //エラー内容の捕捉をするため、出力先をテスト中変更
+ outErr = new(bytes.Buffer)
+
+ for _, test := range tests {
+ //失敗時にどのテストのどの引数で起きたのかを分かるようにする
+ descr := fmt.Sprintf("run() -bf=%s -af=%s -dir=%s", test.bf, test.af, test.dir)
+
+ flag.CommandLine.Set("bf", test.bf)
+ flag.CommandLine.Set("af", test.af)
+ flag.CommandLine.Set("dir", test.dir)
+
+ exitCode := run()
+ var got string
+ got = outErr.(*bytes.Buffer).String()
+
+ switch {
+ //エラー発生しないケースだが、エラーが発生した場合
+ case !test.wantErr && exitCode != exitCodeSuccess:
+ t.Errorf("want no err , %s = %q ", descr, got)
+ //エラーが発生するケースだが、エラーが発生しない場合
+ case test.wantErr && exitCode == exitCodeSuccess:
+ t.Errorf("want err , %s = %q ", descr, got)
+ //エラーが発生するケースで、エラー内容が異なる場合
+ case test.wantErr && got != test.want:
+ t.Errorf("%s = %q ,want %q", descr, got, test.want)
+
+ }
+ }
+}
+
+func TestCheckDir(t *testing.T) {
+ var tests = []struct {
+ dir string
+ wantErr bool
+ want string
+ }{
+ {"./testdata", false, ""},
+ {"", true, "No directory specified"},
+ {"./test", true, "stat ./test: no such file or directory"},
+ {"./README.md", true, "stat ./README.md: no such file or directory"},
+ }
+
+ for _, test := range tests {
+ //失敗時にどのテストのどの引数で起きたのかを分かるようにする
+ descr := fmt.Sprintf("checkDir(%s)", test.dir)
+
+ err := checkDir(test.dir)
+
+ var got string
+ if err != nil {
+ got = err.Error()
+ }
+
+ errorfHelper(t, descr, test.wantErr, err, test.want, got)
+
+ }
+}
+
+func TestConvert(t *testing.T) {
+ var tests = []struct {
+ bf string
+ af string
+ dir string
+ wantErr bool
+ want string
+ }{
+ {"TIFF", "JPG", "./testdata/201_lower", false, ""},
+ {"tiff", "jpg", "./testdata/202_subDir", false, ""},
+ }
+
+ for _, test := range tests {
+ //失敗時にどのテストのどの引数で起きたのかを分かるようにする
+ descr := fmt.Sprintf("convert(%s, %s, %s)", test.af, test.bf, test.dir)
+
+ err := convert(test.af, test.bf, test.dir)
+
+ var got string
+ if err != nil {
+ got = err.Error()
+ }
+
+ errorfHelper(t, descr, test.wantErr, err, test.want, got)
+
+ }
+}
+
+func errorfHelper(t *testing.T, descr string, wantErr bool, err error, want string, got string) {
+ t.Helper()
+
+ switch {
+ //エラー発生しないケースだが、エラーが発生した場合
+ case !wantErr && err != nil:
+ t.Errorf("want no err , %s = %q ", descr, err)
+ //エラーが発生するケースだが、エラーが発生しない場合
+ case wantErr && err == nil:
+ t.Errorf("want err , %s = %q ", descr, err)
+ //エラーが発生するケースで、エラー内容が異なる場合
+ case wantErr && got != want:
+ t.Errorf("%s = %q ,want %q", descr, got, want)
+ }
+}
diff --git a/kadai2/InoAyaka/testdata/101_success/_JR6xY.tiff b/kadai2/InoAyaka/testdata/101_success/_JR6xY.tiff
new file mode 100644
index 0000000..6494627
Binary files /dev/null and b/kadai2/InoAyaka/testdata/101_success/_JR6xY.tiff differ
diff --git a/kadai2/InoAyaka/testdata/201_lower/_JR6xY.tiff b/kadai2/InoAyaka/testdata/201_lower/_JR6xY.tiff
new file mode 100644
index 0000000..6494627
Binary files /dev/null and b/kadai2/InoAyaka/testdata/201_lower/_JR6xY.tiff differ
diff --git a/kadai2/InoAyaka/testdata/202_subDir/XvMdoh.bmp b/kadai2/InoAyaka/testdata/202_subDir/XvMdoh.bmp
new file mode 100644
index 0000000..962dca9
Binary files /dev/null and b/kadai2/InoAyaka/testdata/202_subDir/XvMdoh.bmp differ
diff --git a/kadai2/InoAyaka/testdata/202_subDir/_JR6xY.tiff b/kadai2/InoAyaka/testdata/202_subDir/_JR6xY.tiff
new file mode 100644
index 0000000..6494627
Binary files /dev/null and b/kadai2/InoAyaka/testdata/202_subDir/_JR6xY.tiff differ
diff --git a/kadai2/InoAyaka/testdata/202_subDir/sub/_JR6xY.tiff b/kadai2/InoAyaka/testdata/202_subDir/sub/_JR6xY.tiff
new file mode 100644
index 0000000..6494627
Binary files /dev/null and b/kadai2/InoAyaka/testdata/202_subDir/sub/_JR6xY.tiff differ
diff --git a/kadai2/InoAyaka/testdata/301_toJpg/_JR6xY.tiff b/kadai2/InoAyaka/testdata/301_toJpg/_JR6xY.tiff
new file mode 100644
index 0000000..6494627
Binary files /dev/null and b/kadai2/InoAyaka/testdata/301_toJpg/_JR6xY.tiff differ
diff --git a/kadai2/InoAyaka/testdata/302_toPng/XvMdoh.bmp b/kadai2/InoAyaka/testdata/302_toPng/XvMdoh.bmp
new file mode 100644
index 0000000..962dca9
Binary files /dev/null and b/kadai2/InoAyaka/testdata/302_toPng/XvMdoh.bmp differ
diff --git a/kadai2/InoAyaka/testdata/303_toGif/gophercolor.png b/kadai2/InoAyaka/testdata/303_toGif/gophercolor.png
new file mode 100644
index 0000000..2aae29b
Binary files /dev/null and b/kadai2/InoAyaka/testdata/303_toGif/gophercolor.png differ
diff --git a/kadai2/InoAyaka/testdata/304_toBmp/XvMdoh.gif b/kadai2/InoAyaka/testdata/304_toBmp/XvMdoh.gif
new file mode 100644
index 0000000..4df330e
Binary files /dev/null and b/kadai2/InoAyaka/testdata/304_toBmp/XvMdoh.gif differ
diff --git a/kadai2/InoAyaka/testdata/305_toTiff/vMfDls.jpg b/kadai2/InoAyaka/testdata/305_toTiff/vMfDls.jpg
new file mode 100644
index 0000000..9df18c0
Binary files /dev/null and b/kadai2/InoAyaka/testdata/305_toTiff/vMfDls.jpg differ
diff --git a/kadai2/InoAyaka/testdata/391_notSupport/vMfDls.jpg b/kadai2/InoAyaka/testdata/391_notSupport/vMfDls.jpg
new file mode 100644
index 0000000..9df18c0
Binary files /dev/null and b/kadai2/InoAyaka/testdata/391_notSupport/vMfDls.jpg differ
diff --git a/kadai2/InoAyaka/testdata/392_openErrorE/vMfDls.jpg b/kadai2/InoAyaka/testdata/392_openErrorE/vMfDls.jpg
new file mode 100644
index 0000000..9df18c0
Binary files /dev/null and b/kadai2/InoAyaka/testdata/392_openErrorE/vMfDls.jpg differ
diff --git a/kadai2/InoAyaka/testdata/393_decordError/notImage.jpg b/kadai2/InoAyaka/testdata/393_decordError/notImage.jpg
new file mode 100644
index 0000000..2e65efe
--- /dev/null
+++ b/kadai2/InoAyaka/testdata/393_decordError/notImage.jpg
@@ -0,0 +1 @@
+a
\ No newline at end of file
diff --git a/kadai2/InoAyaka/testdata/394_createError/gophercolor.jpg b/kadai2/InoAyaka/testdata/394_createError/gophercolor.jpg
new file mode 100644
index 0000000..49b8318
Binary files /dev/null and b/kadai2/InoAyaka/testdata/394_createError/gophercolor.jpg differ
diff --git a/kadai2/InoAyaka/testdata/394_createError/gophercolor.png b/kadai2/InoAyaka/testdata/394_createError/gophercolor.png
new file mode 100644
index 0000000..8d326f1
Binary files /dev/null and b/kadai2/InoAyaka/testdata/394_createError/gophercolor.png differ