func testCodec(t *testing.T, codec pkm.Codec) { if len(codec.Name()) == 0 { t.Errorf("Name: expected non-empty name") } size := 1024 err := errors.New("reader error") testIO(t, codec, "real size", &dummyIO{buf: make([]byte, 12), now: false, err: nil}) testIO(t, codec, "real size; now", &dummyIO{buf: make([]byte, 12), now: true, err: nil}) testIO(t, codec, "real size; error", &dummyIO{buf: make([]byte, 12), now: false, err: err}) testIO(t, codec, "real size; error now", &dummyIO{buf: make([]byte, 12), now: true, err: err}) testIO(t, codec, "half size", &dummyIO{buf: make([]byte, size/2), now: false, err: nil}) testIO(t, codec, "half size; now", &dummyIO{buf: make([]byte, size/2), now: true, err: nil}) testIO(t, codec, "half size; error", &dummyIO{buf: make([]byte, size/2), now: false, err: err}) testIO(t, codec, "half size; error now", &dummyIO{buf: make([]byte, size/2), now: true, err: err}) testIO(t, codec, "full size", &dummyIO{buf: make([]byte, size), now: false, err: nil}) testIO(t, codec, "full size; now", &dummyIO{buf: make([]byte, size), now: true, err: nil}) testIO(t, codec, "full size; error", &dummyIO{buf: make([]byte, size), now: false, err: err}) testIO(t, codec, "full size; error now", &dummyIO{buf: make([]byte, size), now: true, err: err}) testIO(t, codec, "full+half size", &dummyIO{buf: make([]byte, size+size/2), now: false, err: nil}) testIO(t, codec, "full+half size; now", &dummyIO{buf: make([]byte, size+size/2), now: true, err: nil}) testIO(t, codec, "full+half size; error", &dummyIO{buf: make([]byte, size+size/2), now: false, err: err}) testIO(t, codec, "full+half size; error now", &dummyIO{buf: make([]byte, size+size/2), now: true, err: err}) testIO(t, codec, "double size", &dummyIO{buf: make([]byte, size*2), now: false, err: nil}) testIO(t, codec, "double size; now", &dummyIO{buf: make([]byte, size*2), now: true, err: nil}) testIO(t, codec, "double size; error", &dummyIO{buf: make([]byte, size*2), now: false, err: err}) testIO(t, codec, "double size; error now", &dummyIO{buf: make([]byte, size*2), now: true, err: err}) content := []byte("Test Data 1234 \uF000\uF080\uF0FF") testIO(t, codec, "real content", &dummyIO{buf: content, now: false, err: nil}) testIO(t, codec, "real content; now", &dummyIO{buf: content, now: true, err: nil}) testIO(t, codec, "real content; error", &dummyIO{buf: content, now: false, err: err}) testIO(t, codec, "real content; error now", &dummyIO{buf: content, now: true, err: err}) }