1
2
3
4
5 package flate
6
7 import (
8 "bytes"
9 "io"
10 "strings"
11 "testing"
12 )
13
14 func TestReset(t *testing.T) {
15 ss := []string{
16 "lorem ipsum izzle fo rizzle",
17 "the quick brown fox jumped over",
18 }
19
20 deflated := make([]bytes.Buffer, 2)
21 for i, s := range ss {
22 w, _ := NewWriter(&deflated[i], 1)
23 w.Write([]byte(s))
24 w.Close()
25 }
26
27 inflated := make([]bytes.Buffer, 2)
28
29 f := NewReader(&deflated[0])
30 io.Copy(&inflated[0], f)
31 f.(Resetter).Reset(&deflated[1], nil)
32 io.Copy(&inflated[1], f)
33 f.Close()
34
35 for i, s := range ss {
36 if s != inflated[i].String() {
37 t.Errorf("inflated[%d]:\ngot %q\nwant %q", i, inflated[i], s)
38 }
39 }
40 }
41
42 func TestReaderTruncated(t *testing.T) {
43 vectors := []struct{ input, output string }{
44 {"\x00", ""},
45 {"\x00\f", ""},
46 {"\x00\f\x00", ""},
47 {"\x00\f\x00\xf3\xff", ""},
48 {"\x00\f\x00\xf3\xffhello", "hello"},
49 {"\x00\f\x00\xf3\xffhello, world", "hello, world"},
50 {"\x02", ""},
51 {"\xf2H\xcd", "He"},
52 {"\xf2H͙0a\u0084\t", "Hel\x90\x90\x90\x90\x90"},
53 {"\xf2H͙0a\u0084\t\x00", "Hel\x90\x90\x90\x90\x90"},
54 }
55
56 for i, v := range vectors {
57 r := strings.NewReader(v.input)
58 zr := NewReader(r)
59 b, err := io.ReadAll(zr)
60 if err != io.ErrUnexpectedEOF {
61 t.Errorf("test %d, error mismatch: got %v, want io.ErrUnexpectedEOF", i, err)
62 }
63 if string(b) != v.output {
64 t.Errorf("test %d, output mismatch: got %q, want %q", i, b, v.output)
65 }
66 }
67 }
68
69 func TestResetDict(t *testing.T) {
70 dict := []byte("the lorem fox")
71 ss := []string{
72 "lorem ipsum izzle fo rizzle",
73 "the quick brown fox jumped over",
74 }
75
76 deflated := make([]bytes.Buffer, len(ss))
77 for i, s := range ss {
78 w, _ := NewWriterDict(&deflated[i], DefaultCompression, dict)
79 w.Write([]byte(s))
80 w.Close()
81 }
82
83 inflated := make([]bytes.Buffer, len(ss))
84
85 f := NewReader(nil)
86 for i := range inflated {
87 f.(Resetter).Reset(&deflated[i], dict)
88 io.Copy(&inflated[i], f)
89 }
90 f.Close()
91
92 for i, s := range ss {
93 if s != inflated[i].String() {
94 t.Errorf("inflated[%d]:\ngot %q\nwant %q", i, inflated[i], s)
95 }
96 }
97 }
98
View as plain text