Skip to content

Commit 05753c2

Browse files
authored
Merge pull request #838 from devlights/add-iotest-examples
2 parents e309823 + c2cb926 commit 05753c2

File tree

2 files changed

+81
-0
lines changed

2 files changed

+81
-0
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# https://taskfile.dev
2+
3+
version: '3'
4+
5+
tasks:
6+
default:
7+
cmds:
8+
- go test -v .
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package testreader
2+
3+
import (
4+
"io"
5+
"strings"
6+
"testing"
7+
"testing/iotest"
8+
)
9+
10+
type (
11+
// UppercaseReader は、読み込んだ文字を大文字に変換するカスタム io.Reader です。
12+
// ASCIIのみ対応しており、それ以外の文字コードの場合はそのままとなります。
13+
UppercaseReader struct {
14+
r io.Reader
15+
l func(format string, args ...any)
16+
}
17+
)
18+
19+
func (me *UppercaseReader) Read(p []byte) (n int, err error) {
20+
if me == nil {
21+
return
22+
}
23+
24+
n, err = me.r.Read(p)
25+
me.l("len(p)==%2d\tn==%2d\terr==%v", len(p), n, err)
26+
27+
for i := 0; i < n; i++ {
28+
if p[i] >= 'a' && p[i] <= 'z' {
29+
p[i] -= 'a' - 'A'
30+
}
31+
}
32+
33+
return
34+
}
35+
36+
func TestUppercaseReader(t *testing.T) {
37+
var (
38+
input = "hello"
39+
expected = "HELLO"
40+
reader = UppercaseReader{r: strings.NewReader(input), l: t.Logf}
41+
err error
42+
)
43+
44+
//
45+
// iotest.TestReader() は、指定された io.Reader の実装が正しく動作するかを
46+
// テストしてくれる。カスタムな io.Reader を作成した際の動作テストに利用出来る。
47+
// (バッファである p の値を nil で読んだときの挙動など)
48+
//
49+
// 第二引数に指定するのは、期待値となる。
50+
//
51+
// - https://pkg.go.dev/testing/iotest@go1.22.6#TestReader
52+
//
53+
err = iotest.TestReader(&reader, []byte(expected))
54+
if err != nil {
55+
t.Fatal(err)
56+
}
57+
58+
/*
59+
$ task
60+
task: [default] go test -v .
61+
=== RUN TestUppercaseReader
62+
testreader_test.go:23: len(p)== 0 n== 0 err==<nil>
63+
testreader_test.go:23: len(p)== 1 n== 1 err==<nil>
64+
testreader_test.go:23: len(p)== 2 n== 2 err==<nil>
65+
testreader_test.go:23: len(p)== 3 n== 2 err==<nil>
66+
testreader_test.go:23: len(p)== 1 n== 0 err==EOF
67+
testreader_test.go:23: len(p)==10 n== 0 err==EOF
68+
--- PASS: TestUppercaseReader (0.00s)
69+
PASS
70+
ok github.com/devlights/try-golang/examples/singleapp/iotest/testreader 0.002s
71+
*/
72+
73+
}

0 commit comments

Comments
 (0)