memio - readwrite_test.go
1 package memio
2
3 import (
4 "io"
5 "testing"
6 )
7
8 var (
9 _ io.Reader = new(ReadMem)
10 _ io.Closer = new(ReadMem)
11 _ io.Seeker = new(ReadMem)
12 _ io.WriterTo = new(ReadMem)
13 _ io.ByteReader = new(ReadMem)
14 _ io.ReaderAt = new(ReadMem)
15
16 _ io.Writer = new(WriteMem)
17 _ io.Closer = new(WriteMem)
18 _ io.Seeker = new(WriteMem)
19 _ io.ReaderFrom = new(WriteMem)
20 _ io.ByteWriter = new(WriteMem)
21 _ io.WriterAt = new(WriteMem)
22 )
23
24 func TestReadWriteRead(t *testing.T) {
25 data := []byte("Hello, World!")
26 reader := OpenMem(&data)
27 toRead := make([]byte, 5)
28 if n, err := reader.Read(toRead); n != 5 {
29 t.Errorf("expecting to read 5 bytes, read %d", n)
30 return
31 } else if err != nil {
32 t.Errorf("got error: %q", err.Error())
33 return
34 } else if string(toRead) != "Hello" {
35 t.Errorf("expecting %q, got %q", "Hello", string(toRead))
36 return
37 }
38 if n, err := reader.Read(toRead); n != 5 {
39 t.Errorf("expecting to read 5 bytes, read %d", n)
40 return
41 } else if err != nil {
42 t.Errorf("got error: %q", err.Error())
43 return
44 } else if string(toRead) != ", Wor" {
45 t.Errorf("expecting %q, got %q", ", Wor", string(toRead))
46 return
47 }
48 if n, err := reader.Read(toRead); n != 3 {
49 t.Errorf("expecting to read 3 bytes, read %d", n)
50 return
51 } else if err != nil {
52 t.Errorf("got error: %q", err.Error())
53 return
54 } else if string(toRead) != "ld!or" {
55 t.Errorf("expecting %q, got %q", "ld!or", string(toRead))
56 return
57 }
58 if n, err := reader.Read(toRead); n != 0 {
59 t.Errorf("expecting to read 0 bytes, read %d", n)
60 return
61 } else if err != io.EOF {
62 t.Errorf("expecting EOF")
63 }
64 if pos, err := reader.Seek(2, 0); pos != 2 {
65 t.Errorf("expected to be at position 2, got %d", pos)
66 return
67 } else if err != nil {
68 t.Errorf("got error: %q", err.Error())
69 return
70 } else if n, err := reader.Read(toRead); n != 5 {
71 t.Errorf("expecting to read 5 bytes, read %d", n)
72 return
73 } else if err != nil {
74 t.Errorf("got error: %q", err.Error())
75 return
76 } else if string(toRead) != "llo, " {
77 t.Errorf("expecting %q, got %q", "llo, ", string(toRead))
78 return
79 }
80 if pos, err := reader.Seek(2, 1); pos != 9 {
81 t.Errorf("expected to be at position 9, got %d", pos)
82 return
83 } else if err != nil {
84 t.Errorf("got error: %q", err.Error())
85 return
86 } else if n, err := reader.Read(toRead); n != 4 {
87 t.Errorf("expecting to read 4 bytes, read %d", n)
88 return
89 } else if err != nil {
90 t.Errorf("got error: %q", err.Error())
91 return
92 } else if string(toRead) != "rld! " {
93 t.Errorf("expecting %q, got %q", "rld! ", string(toRead))
94 return
95 }
96 if pos, err := reader.Seek(-6, 2); pos != 7 {
97 t.Errorf("expected to be at position 7, got %d", pos)
98 return
99 } else if err != nil {
100 t.Errorf("got error: %q", err.Error())
101 return
102 } else if n, err := reader.Read(toRead); n != 5 {
103 t.Errorf("expecting to read 5 bytes, read %d", n)
104 return
105 } else if err != nil {
106 t.Errorf("got error: %q", err.Error())
107 return
108 } else if string(toRead) != "World" {
109 t.Errorf("expecting %q, got %q", "World", string(toRead))
110 return
111 }
112 if _, err := reader.Seek(1, 0); err != nil {
113 t.Errorf("got error: %q", err.Error())
114 return
115 }
116 reader.Close()
117 }
118
119 func TestReadWriteWrite(t *testing.T) {
120 data := []byte("Beep")
121 writer := OpenMem(&data)
122 if n, err := writer.Write([]byte("J")); n != 1 {
123 t.Errorf("expecting to write 1 byte, wrote %d", n)
124 return
125 } else if err != nil {
126 t.Errorf("got error: %q", err.Error())
127 return
128 } else if string(data) != "Jeep" {
129 t.Errorf("expecting %q, got %q", "Jeep", string(data))
130 return
131 }
132 if n, err := writer.Write([]byte("ohn")); n != 3 {
133 t.Errorf("expecting to write 3 bytes, wrote %d", n)
134 return
135 } else if err != nil {
136 t.Errorf("got error: %q", err.Error())
137 return
138 } else if string(data) != "John" {
139 t.Errorf("expecting %q, got %q", "John", string(data))
140 return
141 }
142 if n, err := writer.Write([]byte("ny")); n != 2 {
143 t.Errorf("expecting to write 2 bytes, wrote %d", n)
144 return
145 } else if err != nil {
146 t.Errorf("got error: %q", err.Error())
147 return
148 } else if string(data) != "Johnny" {
149 t.Errorf("expecting %q, got %q", "Johnny", string(data))
150 return
151 }
152 if pos, err := writer.Seek(0, 0); pos != 0 {
153 t.Errorf("expected to be at position 0, got %d", pos)
154 } else if err != nil {
155 t.Errorf("got error: %q", err.Error())
156 return
157 } else if n, err := writer.Write([]byte("Edmund")); n != 6 {
158 t.Errorf("expecting to write 6 bytes, wrote %d", n)
159 return
160 } else if err != nil {
161 t.Errorf("got error: %q", err.Error())
162 return
163 } else if string(data) != "Edmund" {
164 t.Errorf("expecting %q, got %q", "Edmund", string(data))
165 return
166 }
167 if pos, err := writer.Seek(-4, 2); pos != 2 {
168 t.Errorf("expected to be at position 0, got %d", pos)
169 } else if err != nil {
170 t.Errorf("got error: %q", err.Error())
171 return
172 } else if n, err := writer.Write([]byte("war")); n != 3 {
173 t.Errorf("expecting to write 3 bytes, wrote %d", n)
174 return
175 } else if err != nil {
176 t.Errorf("got error: %q", err.Error())
177 return
178 } else if string(data) != "Edward" {
179 t.Errorf("expecting %q, got %q", "Edward", string(data))
180 return
181 }
182 if pos, err := writer.Seek(1, 1); pos != 6 {
183 t.Errorf("expected to be at position 6, got %d", pos)
184 } else if err != nil {
185 t.Errorf("got error: %q", err.Error())
186 return
187 } else if n, err := writer.Write([]byte("o")); n != 1 {
188 t.Errorf("expecting to write 1 bytes, wrote %d", n)
189 return
190 } else if err != nil {
191 t.Errorf("got error: %q", err.Error())
192 return
193 } else if string(data) != "Edwardo" {
194 t.Errorf("expecting %q, got %q", "Edwardo", string(data))
195 return
196 }
197 writer.Close()
198 _, err := writer.Seek(0, 0)
199 if err != ErrClosed {
200 t.Errorf("expecting close error")
201 return
202 }
203 _, err = writer.Write([]byte("Beep"))
204 if err != ErrClosed {
205 t.Errorf("expecting close error")
206 return
207 }
208 }