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