// Copyright 2009 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 zlib

import (
	"bytes";
	"io";
	"os";
	"testing";
)

type zlibTest struct {
	desc string;
	raw string;
	compressed []byte;
	err os.Error;
}

// Compare-to-golden test data was generated by the ZLIB example program at
// http://www.zlib.net/zpipe.c

var zlibTests = []zlibTest {
	zlibTest {
		"empty",
		"",
		[]byte {
			0x78, 0x9c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01,
		},
		nil
	},
	zlibTest {
		"goodbye",
		"goodbye, world",
		[]byte {
			0x78, 0x9c, 0x4b, 0xcf, 0xcf, 0x4f, 0x49, 0xaa,
			0x4c, 0xd5, 0x51, 0x28, 0xcf, 0x2f, 0xca, 0x49,
			0x01, 0x00, 0x28, 0xa5, 0x05, 0x5e,
		},
		nil
	},
	zlibTest {
		"bad header",
		"",
		[]byte {
			0x78, 0x9f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01,
		},
		HeaderError
	},
	zlibTest {
		"bad checksum",
		"",
		[]byte {
			0x78, 0x9c, 0x03, 0x00, 0x00, 0x00, 0x00, 0xff,
		},
		ChecksumError,
	},
	zlibTest {
		"not enough data",
		"",
		[]byte {
			0x78, 0x9c, 0x03, 0x00, 0x00, 0x00,
		},
		io.ErrUnexpectedEOF,
	},
	zlibTest {
		"excess data is silently ignored",
		"",
		[]byte {
			0x78, 0x9c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01,
			0x78, 0x9c, 0xff,
		},
		nil,
	},
}

func TestInflater(t *testing.T) {
	b := new(bytes.Buffer);
	for _, tt := range zlibTests {
		in := bytes.NewBuffer(tt.compressed);
		zlib, err := NewInflater(in);
		if err != nil {
			if err != tt.err {
				t.Errorf("%s: NewInflater: %s", tt.desc, err);
			}
			continue;
		}
		defer zlib.Close();
		b.Reset();
		n, err := io.Copy(zlib, b);
		if err != nil {
			if err != tt.err {
				t.Errorf("%s: io.Copy: %v want %v", tt.desc, err, tt.err);
			}
			continue;
		}
		s := b.String();
		if s != tt.raw {
			t.Errorf("%s: got %d-byte %q want %d-byte %q", tt.desc, n, s, len(tt.raw), tt.raw);
		}
	}
}
