implement Stream.ReadByte

This commit is contained in:
Lucas Clemente
2016-04-18 11:00:26 +02:00
parent c430fbd5d4
commit 52268753e9
2 changed files with 53 additions and 0 deletions

View File

@@ -53,6 +53,20 @@ func (s *Stream) Read(p []byte) (int, error) {
return bytesRead, nil
}
// ReadByte implements io.ByteReader
func (s *Stream) ReadByte() (byte, error) {
// TODO: Optimize
p := make([]byte, 1)
n, err := s.Read(p)
if err != nil {
return 0, err
}
if n != 1 {
panic("Stream: should have returned error")
}
return p[0], nil
}
func (s *Stream) Write(p []byte) (int, error) {
frame := &frames.StreamFrame{
StreamID: s.StreamID,

View File

@@ -23,6 +23,45 @@ var _ = Describe("Stream", func() {
Expect(b).To(Equal([]byte{0xDE, 0xAD, 0xBE, 0xEF}))
})
It("reads a single StreamFrame in multiple goes", func() {
frame := frames.StreamFrame{
Offset: 0,
Data: []byte{0xDE, 0xAD, 0xBE, 0xEF},
}
stream := NewStream(nil, 1337)
stream.AddStreamFrame(&frame)
b := make([]byte, 2)
n, err := stream.Read(b)
Expect(err).ToNot(HaveOccurred())
Expect(n).To(Equal(2))
Expect(b).To(Equal([]byte{0xDE, 0xAD}))
n, err = stream.Read(b)
Expect(err).ToNot(HaveOccurred())
Expect(n).To(Equal(2))
Expect(b).To(Equal([]byte{0xBE, 0xEF}))
})
It("reads single bytes", func() {
frame := frames.StreamFrame{
Offset: 0,
Data: []byte{0xDE, 0xAD, 0xBE, 0xEF},
}
stream := NewStream(nil, 1337)
stream.AddStreamFrame(&frame)
b, err := stream.ReadByte()
Expect(err).ToNot(HaveOccurred())
Expect(b).To(Equal(byte(0xDE)))
b, err = stream.ReadByte()
Expect(err).ToNot(HaveOccurred())
Expect(b).To(Equal(byte(0xAD)))
b, err = stream.ReadByte()
Expect(err).ToNot(HaveOccurred())
Expect(b).To(Equal(byte(0xBE)))
b, err = stream.ReadByte()
Expect(err).ToNot(HaveOccurred())
Expect(b).To(Equal(byte(0xEF)))
})
It("reads all data available", func() {
frame1 := frames.StreamFrame{
Offset: 0,