// Copyright 2014 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package flate import ( "bytes" "io" "strings" "testing" ) func TestReset(t *testing.T) { ss := []string{ "lorem ipsum izzle fo rizzle", "the quick brown fox jumped over", } deflated := make([]bytes.Buffer, 2) for i, s := range ss { w, _ := NewWriter(&deflated[i], 1) w.Write([]byte(s)) w.Close() } inflated := make([]bytes.Buffer, 2) f := NewReader(&deflated[0]) io.Copy(&inflated[0], f) f.(Resetter).Reset(&deflated[1], nil) io.Copy(&inflated[1], f) f.Close() for i, s := range ss { if s != inflated[i].String() { t.Errorf("inflated[%d]:\ngot %q\nwant %q", i, inflated[i], s) } } } func TestReaderTruncated(t *testing.T) { vectors := []struct{ input, output string }{ {"\x00", ""}, {"\x00\f", ""}, {"\x00\f\x00", ""}, {"\x00\f\x00\xf3\xff", ""}, {"\x00\f\x00\xf3\xffhello", "hello"}, {"\x00\f\x00\xf3\xffhello, world", "hello, world"}, {"\x02", ""}, {"\xf2H\xcd", "He"}, {"\xf2H͙0a\u0084\t", "Hel\x90\x90\x90\x90\x90"}, {"\xf2H͙0a\u0084\t\x00", "Hel\x90\x90\x90\x90\x90"}, } for i, v := range vectors { r := strings.NewReader(v.input) zr := NewReader(r) b, err := io.ReadAll(zr) if err != io.ErrUnexpectedEOF { t.Errorf("test %d, error mismatch: got %v, want io.ErrUnexpectedEOF", i, err) } if string(b) != v.output { t.Errorf("test %d, output mismatch: got %q, want %q", i, b, v.output) } } } func TestResetDict(t *testing.T) { dict := []byte("the lorem fox") ss := []string{ "lorem ipsum izzle fo rizzle", "the quick brown fox jumped over", } deflated := make([]bytes.Buffer, len(ss)) for i, s := range ss { w, _ := NewWriterDict(&deflated[i], DefaultCompression, dict) w.Write([]byte(s)) w.Close() } inflated := make([]bytes.Buffer, len(ss)) f := NewReader(nil) for i := range inflated { f.(Resetter).Reset(&deflated[i], dict) io.Copy(&inflated[i], f) } f.Close() for i, s := range ss { if s != inflated[i].String() { t.Errorf("inflated[%d]:\ngot %q\nwant %q", i, inflated[i], s) } } }