1
// Copyright 2014-2016 Ulrich Kunitz. All rights reserved.
2
// Use of this source code is governed by a BSD-style
3
// license that can be found in the LICENSE file.
13
func TestChunkTypeString(t *testing.T) {
14
tests := [...]struct {
26
for _, c := range tests {
27
s := fmt.Sprintf("%v", c.c)
29
t.Errorf("got %s; want %s", s, c.s)
34
func TestHeaderChunkType(t *testing.T) {
42
{h: 1<<7 | 0x1f, c: cL},
43
{h: 1<<7 | 1<<5 | 0x1f, c: cLR},
44
{h: 1<<7 | 1<<6 | 0x1f, c: cLRN},
45
{h: 1<<7 | 1<<6 | 1<<5 | 0x1f, c: cLRND},
46
{h: 1<<7 | 1<<6 | 1<<5, c: cLRND},
48
if _, err := headerChunkType(3); err == nil {
49
t.Fatalf("headerChunkType(%d) got %v; want %v",
50
3, err, errHeaderByte)
52
for _, tc := range tests {
53
c, err := headerChunkType(tc.h)
55
t.Fatalf("headerChunkType error %s", err)
58
t.Errorf("got %s; want %s", c, tc.c)
63
func TestHeaderLen(t *testing.T) {
68
{cEOS, 1}, {cU, 3}, {cUD, 3}, {cL, 5}, {cLR, 5}, {cLRN, 6},
71
for _, tc := range tests {
74
t.Errorf("header length for %s %d; want %d",
80
func chunkHeaderSamples(t *testing.T) []chunkHeader {
81
props := Properties{LC: 3, LP: 0, PB: 2}
82
headers := make([]chunkHeader, 0, 12)
83
for c := cEOS; c <= cLRND; c++ {
87
h.uncompressed = 0x0304
95
headers = append(headers, h)
100
func TestChunkHeaderMarshalling(t *testing.T) {
101
for _, h := range chunkHeaderSamples(t) {
102
data, err := h.MarshalBinary()
104
t.Fatalf("MarshalBinary for %v error %s", h, err)
107
if err = g.UnmarshalBinary(data); err != nil {
108
t.Fatalf("UnmarshalBinary error %s", err)
111
t.Fatalf("got %v; want %v", g, h)
116
func TestReadChunkHeader(t *testing.T) {
117
for _, h := range chunkHeaderSamples(t) {
118
data, err := h.MarshalBinary()
120
t.Fatalf("MarshalBinary for %v error %s", h, err)
122
r := bytes.NewReader(data)
123
g, err := readChunkHeader(r)
125
t.Fatalf("readChunkHeader for %v error %s", h, err)
128
t.Fatalf("got %v; want %v", g, h)
133
func TestReadEOS(t *testing.T) {
135
r := bytes.NewReader(b[:])
136
h, err := readChunkHeader(r)
138
t.Fatalf("readChunkHeader error %s", err)
141
t.Errorf("ctype got %s; want %s", h.ctype, cEOS)
143
if h.compressed != 0 {
144
t.Errorf("compressed got %d; want %d", h.compressed, 0)
146
if h.uncompressed != 0 {
147
t.Errorf("uncompressed got %d; want %d", h.uncompressed, 0)
149
wantProps := Properties{}
150
if h.props != wantProps {
151
t.Errorf("props got %v; want %v", h.props, wantProps)