MCPcopy Create free account
hub / github.com/Shopify/goose / TestRuneIO

Function TestRuneIO

syncio/buffer_test.go:309–369  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

307}
308
309func TestRuneIO(t *testing.T) {
310 const NRune = 1000
311 // Built a test slice while we write the data
312 b := make([]byte, utf8.UTFMax*NRune)
313 var buf Buffer
314 n := 0
315 for r := rune(0); r < NRune; r++ {
316 size := utf8.EncodeRune(b[n:], r)
317 nbytes, err := buf.WriteRune(r)
318 if err != nil {
319 t.Fatalf("WriteRune(%U) error: %s", r, err)
320 }
321 if nbytes != size {
322 t.Fatalf("WriteRune(%U) expected %d, got %d", r, size, nbytes)
323 }
324 n += size
325 }
326 b = b[0:n]
327
328 // Check the resulting bytes
329 if !bytes.Equal(buf.Bytes(), b) {
330 t.Fatalf("incorrect result from WriteRune: %q not %q", buf.Bytes(), b)
331 }
332
333 p := make([]byte, utf8.UTFMax)
334 // Read it back with ReadRune
335 for r := rune(0); r < NRune; r++ {
336 size := utf8.EncodeRune(p, r)
337 nr, nbytes, err := buf.ReadRune()
338 if nr != r || nbytes != size || err != nil {
339 t.Fatalf("ReadRune(%U) got %U,%d not %U,%d (err=%s)", r, nr, nbytes, r, size, err)
340 }
341 }
342
343 // Check that UnreadRune works
344 buf.Reset()
345
346 // check at EOF
347 if err := buf.UnreadRune(); err == nil {
348 t.Fatal("UnreadRune at EOF: got no error")
349 }
350 if _, _, err := buf.ReadRune(); err == nil {
351 t.Fatal("ReadRune at EOF: got no error")
352 }
353 if err := buf.UnreadRune(); err == nil {
354 t.Fatal("UnreadRune after ReadRune at EOF: got no error")
355 }
356
357 // check not at EOF
358 buf.Write(b)
359 for r := rune(0); r < NRune; r++ {
360 r1, size, _ := buf.ReadRune()
361 if err := buf.UnreadRune(); err != nil {
362 t.Fatalf("UnreadRune(%U) got error %q", r, err)
363 }
364 r2, nbytes, err := buf.ReadRune()
365 if r1 != r2 || r1 != r || nbytes != size || err != nil {
366 t.Fatalf("ReadRune(%U) after UnreadRune got %U,%d not %U,%d (err=%s)", r, r2, nbytes, r, size, err)

Callers

nothing calls this directly

Calls 6

WriteRuneMethod · 0.95
BytesMethod · 0.95
ReadRuneMethod · 0.95
ResetMethod · 0.95
UnreadRuneMethod · 0.95
WriteMethod · 0.95

Tested by

no test coverage detected